在从Python pyodbc调用SQL Server中的存储过程时遇到问题

这是一个常见的问题,如果是这样的话,我已经从其他问题中获得了一些好的线索,但我仍然没有成功。

我在SQL Server中有一个复杂的存储过程,它执行一系列操作来填充表。它不接受任何参数,也不返回任何字段。在我调用SP之后,我查询表--我需要成批处理大量数据,这很好用。从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设置为ON,这样,在返回之前,python将等待SP完成。但当我运行此命令时,系统不会调用SP。相同的连接参数可用于查询相同模式中的表。不会产生任何错误。

我没有主意了。


解决方案

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

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

相关文章