如何检索存储过程的输出参数?

How to retrieve an output parameter of a stored procedure?

我正在尝试执行一个 SQL 存储过程,它执行一些插入和更新,我将一个名为 lcLogSessionId 的参数传递给它。在程序执行期间,如果出现错误,此参数设置为 1,如果一切正常,则保持为 0。 在我的 python 脚本中,我需要在存储过程执行结束时检索该值。

这是我的代码:

stored_proc = "Exec [APP].[dataImport] @lcLogSessionId = %s"%(0)
conn = pyodbc.connect(connection_string, autocommit = True)
cursor = conn.cursor()
cursor.execute(stored_proc)

我尝试使用 row = cursor.fetchone() 获取游标,但出现错误消息“无结果。前一个 SQL 不是查询”。 有没有办法获取 lcLogSessionId 的值?

pyodbc 当前未实现可选的 .callproc() 方法,因此需要一种变通方法来检索输出参数和 return 值。对于涉及匿名代码块的 SQL 服务器执行存储过程,然后 SELECT 值,例如

sql = """\
DECLARE @out nvarchar(max);
EXEC [dbo].[test_for_pyodbc] @param_in = ?, @param_out = @out OUTPUT;
SELECT @out AS the_output;
"""
params = ("Burma!", )
crsr.execute(sql, params)
rows = crsr.fetchall()
while rows:
    print(rows)
    if crsr.nextset():
        rows = crsr.fetchall()
    else:
        rows = None

pyodbc wiki 上的更多详细信息:

https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures#output-parameters-and-return-values