![](/img/trans.png)
[英]How to get a SQL Server stored procedure return value using pyodbc?
[英]sql server return value with pyodbc
我正在尝试使用pyodbc
运行一些存储的proc并使用以下代码获取单个返回值:
conn = pyodbc.connect("driver={SQL Server};server=MyServer;database=MyDB;trusted_connection=true")
cursor = conn.cursor()
SQL_command = """
DECLARE @ret INT
EXEC @ret = [dbo].proc_mySP
@group= 0
, @description =?
SELECT @ret
"""
cursor.execute(SQL_command, description)
retValue = cursor.fetchall()
并且存储过程的框架如下:
-- SOME CODE
-- ......
-- EXEC another_sp
-- DECLARE @RET INT
-- SELECT @RET as retValue
-- ......
上面的sql在sql服务器中工作正常,但是,当上面的Python代码调用它时,它会给出错误消息:
pyodbc.ProgrammingError :(“ 24000”,“ [24000] [Microsoft] [ODBC SQL Server驱动程序]无效的游标状态(0)(SQLNumResultCols)”)
我可以知道我的代码有什么问题吗?
非常感谢。
尝试通过pyodbc运行多语句T-SQL脚本可能会出现问题。 即使这在SSMS中工作正常
DECLARE @tbl AS TABLE (retVal INT);
INSERT INTO @tbl (retVal)
EXEC [dbo].proc_mySP
@group = 37,
@description = 'foo';
SELECT retVal FROM @tbl;
以下Python代码...
sql = """\
DECLARE @tbl AS TABLE (retVal INT);
INSERT INTO @tbl (retVal)
EXEC [dbo].proc_mySP
@group = 37,
@description = ?;
SELECT retVal FROM @tbl;
"""
crsr.execute(sql, ['foo'])
row = crsr.fetchone()
...因
pyodbc.ProgrammingError:无结果。 以前的SQL不是查询。
如果存储过程返回带有单列的单行结果集,那么您要做的就是
import pyodbc
cnxn = pyodbc.connect("DSN=myDb_SQLEXPRESS")
crsr = cnxn.cursor()
sql = """\
EXEC [dbo].proc_mySP
@group = 37,
@description = ?;
"""
crsr.execute(sql, ['foo'])
the_result = crsr.fetchone()[0]
print(the_result)
通过添加SET NOCOUNT ON在我自己的代码中出现此错误; 作为从Python传递的SQL的第一行。
conn = pyodbc.connect("driver={SQL Server};server=MyServer;database=MyDB;trusted_connection=true")
cursor = conn.cursor()
SQL_command = """
SET NOCOUNT ON;
DECLARE @ret INT
EXEC @ret = [dbo].proc_mySP
@group= 0
, @description =?
SELECT @ret
"""
cursor.execute(SQL_command, description)
retValue = cursor.fetchall()
只需添加“ SET NOCOUNT ON;”即可。 作为过程的第一行,pyodbc将能够在过程结束时从select语句获取数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.