Search code examples
pythonsql-serverpymssql

pymssql how to passing output parameter


I've tried using this code :

   outputparam1 = pymssql.output(int)
   outputparam2=pymssql.output(int)
   outputparam3=pymssql.output(int)

    try:
        with pymssql.connect('localhost','sa','anypassword', 'anydb') as conn:
            with conn.cursor(as_dict=True) as cursor:
                cursor.callproc("storedprocedure_name",('inputparam', outputparam1, outputparam2, outputparam3))
    except Exception,e:
        pass

and this is the SQL Server stored procedure:

ALTER PROCEDURE [dbo].[storedprocedure_name]
     (@inputparam NVARCHAR(100),                                         
      @outputparam1 INT OUTPUT,
      @outputparam2 INT OUTPUT,
      @outputparam3 INT OUTPUT)
AS
BEGIN
END;

This codes still throws an exception

Expected parameter @outputparam1..."

Any help would be very appreciate, thanks


Solution

  • cursor.callproc('storedprocedure_name', (first_param, second_param, an_output_param,))
    

    Then returned value will be available in the "an_output_param" variable.

    In your case you should try this.

    cursor.callproc("storedprocedure_name", ('inputparam', outputparam1, outputparam2, outputparam3,))
    

    Try this as well

    sqlcmd = """
    DECLARE @outputparam1 INT, @outputparam2 INT, @outputparam3 INT
    
    EXEC storedprocedure_name
         %s, @outputparam1 OUT, @outputparam2 OUT, @outputparam3 OUT
    
    SELECT @outputparam1, @outputparam2, @outputparam3
    """
    res = conn.execute_row(sqlcmd, ('inputparam'))