带有参数的 Pyodbc SQL Server 存储过程在本地计算机上工作,但在服务器上不起作用



我有以下Python代码(版本3.8.1(。这在使用 VS Code 终端的本地计算机上工作正常。但是,如果我将脚本复制到服务器然后执行它,则执行命令不会返回任何内容,也不会返回任何错误。

如果我将存储过程调用替换为单个选择语句,那么它就可以工作。我做错了什么?我使用不同的参数执行了存储过程,以查看它是否返回任何记录并且该过程有效。我的手术中也有set count on。使用的帐户是db_owner,并且对过程具有执行权限。

conn = pyodbc.connect('Driver={SQL Server};Server=myserver;Database=db_name;uid=xxx;pwd=yyy')
cursor = conn.cursor()
conn.autocommit = True
params = ( id, del_flag )
sql = "{CALL dbo.proc_name (?,?)}"   # works locally, does not work on server
#sql = """
#EXEC dbo.proc_name @c_id=?, @delete_flag=?  # works locally, does not work on server
#"""
#sql = "select top 1 * from table_name;" # works locally and on server
cursor.execute(sql,params)
rows = cursor.fetchall()
print(rows)
conn.close()

出于某种原因,我不明白过程调用不接受以下格式的参数。

params = ( id, del_flag )
sql = "{ call dbo.proc_name (?,?) }"
cursor.execute(sql,params)

我不得不将上面的 3 行更改为这样的单个语句

cursor.execute("{ call dbo.proc_name("+id+","+del_flag+") }")

相关内容

最新更新