从 Python pyodbc 调用 SQL 服务器中的存储过程时遇到问题

Having trouble calling a stored procedure in SQL Server from Python pyodbc

这是一个常见的问题,如果看起来像,我从其他问题中得到了一些很好的线索,但我仍然没有成功。

我在 SQL 服务器中有一个复杂的存储过程,它会做很多事情来填充 table。它没有参数,也没有 return 任何字段。在我调用 SP 之后,我然后查询 table - 我需要批量处理大量数据,这很好用。从 Python 调用 SP 证明是困难的部分。

def executeSP():
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' +
            server+';DATABASE='+database+';UID='+username+';PWD=' + password)
    cnxn.autocommit = True
    cursor = cnxn.cursor()
    cursor.execute("SET NOCOUNT ON; exec [schema].[SPName]")   
    cursor.close()
    del cursor
    cnxn.close()

我将 NOCOUNT 设置为开,这样 python 将等到 SP 完成后再 returning。但是当我 运行 这个时,SP 没有被调用。相同的连接参数适用于在同一架构中查询 table。没有产生错误。

我运行没主意了。

设置 NOCOUNT ON 并不总是足够的。可以肯定的是,循环直到 pyodbc 认为没有更多的结果集,或者您可以在它完成之前取消执行。例如

cursor.execute(sql)
while cursor.nextset():
    pass 
cursor.close()