Python 如何使用pyodbc获取SQL Server存储过程返回的行集?
我的问题与此密切相关 我使用pyodbc将数据上传到外部SQL数据库,为此,我使用该数据库的存储过程。此过程返回两个内容:Python 如何使用pyodbc获取SQL Server存储过程返回的行集?,python,sql-server,stored-procedures,pyodbc,Python,Sql Server,Stored Procedures,Pyodbc,我的问题与此密切相关 我使用pyodbc将数据上传到外部SQL数据库,为此,我使用该数据库的存储过程。此过程返回两个内容: 行集(如果程序运行正常,则包含文本“Success”的单行,如果程序失败,则包含文本“Fail”后跟任何可用原因的单行) 整数值(0表示成功,1表示失败) 我使用上面链接中描述的方法读取了整数值,但我也想读取行集,因为我想在出现任何错误时获得更多信息 有什么办法吗?我不是SQL专家,但据我所知,行集应该是一个“类似光标”的对象,因为它应该可以循环该行;但是我如何在sel
- 行集(如果程序运行正常,则包含文本“Success”的单行,如果程序失败,则包含文本“Fail”后跟任何可用原因的单行)
- 整数值(0表示成功,1表示失败)
def CallStoredProc(conn, procName, *args):
sql = """SET NOCOUNT ON;
DECLARE @ret int
EXEC @ret = %s %s
SELECT @ret""" % (procName, ','.join(['?'] * len(args)))
return conn.execute(sql, args).fetchall()
但是我不知道如何获取该行,该行也应该在某处可用。用于SQL Server中的以下存储过程
创建过程[dbo]。[IsItGord]
@p1 varchar(50)=“每个人”
作为
开始
声明@retval int;
不计数;
如果@p1='Gord'
开始
设置@retval=0;
选择“成功”作为响应;
结束
其他的
开始
设置@retval=-1;
选择“失败-”+@p1+“不是Gord.”作为响应;
结束
RETURN@retval;
结束
下面是pyodbc代码
cnxn=pyodbc.connect(connStr)
sql=”“”\
声明@return_value int;
EXEC@return_value=[dbo].[IsItGord]?;
选择“返回值”=@返回值;
"""
crsr=cnxn.execute(sql,(“Gord”))
data=crsr.fetchall()
打印(数据)
crsr.nextset()
data=crsr.fetchall()
打印(数据)
印刷品
[('Success',)]
[(0, )]
如果我将.execute()
更改为
crsr=cnxn.execute(sql,(“Fred”))
它打印
[('Fail-Fred不是Gord',)]
[(-1, )]
在SQL server中执行存储过程之前,始终使用:将nocount设置为ON。能否向我们展示您所做的尝试?我添加了一个整数值读数的代码示例。对于这一行,我没有具体的想法,非常希望你能给我任何提示…谢谢Gord给我的好答案!我尝试了这个方法,但问题似乎是cursor.nextset()给出了一个布尔值False,因此我无法调用下一个响应(如果我在调用nextset()后尝试fetchall(),我会得到“pyodbc.ProgrammingError:No results.Previous SQL不是查询”),我将联系数据库管理员,询问该过程如何返回该行;它的工作原理似乎与您的示例不同,否则我希望它能以这种方式工作。