【问题标题】:How to retrieve an output parameter of a stored procedure?如何检索存储过程的输出参数?
【发布时间】:2023-12-17 04:21:01
【问题描述】:

我正在尝试执行一个执行一些插入更新的 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的值?

【问题讨论】:

  • 你见过this吗?
  • 非常感谢,这正是我想要的!

标签: python sql stored-procedures pyodbc


【解决方案1】:

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

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

【讨论】: