我正在努力访问存储过程的结果,为我提供刚刚使用 Turbodbc 4.1.2、Python 3.7 和 SQL Server 2017 插入的行的标识。
我的程序按照以下几行运行:
CREATE OR ALTER PROCEDURE [dbo].[testSP] @var INT
AS
INSERT INTO testTable VALUES (@var)
SELECT 4 --intermediate step to prove concept
--SELECT SCOPE_IDENTITY() as [scope_id] --final goal
--SELECT @@IDENTITY AS '[scope_id]'
我的 Turbodbc 代码如下所示:
cnxn = connect(driver='{ODBC Driver 17 for SQL Server}', server=srv, database=db, uid=user, pwd=password, turbodbc_options=options)
crsr = cnxn.cursor()
cmd = "EXEC testSP 1"
crsr.execute(cmd)
df = pd.DataFrame(crsr.fetchallnumpy())
在没有任何插入的情况下运行存储过程(即,仅“SELECT 4”),结果集返回正常。但是,当使用正确运行的插入运行时,我收到错误“turbodbc.exceptions.InterfaceError: No active result set”。该查询在 SSMS 中运行良好。
我猜这是因为我收到了两个结果集——一个用于插入,一个用于选择。我从关于 SO 的几个问题中看到 nextset 函数在pymssql和pyodbc中可用,但相同的功能在turbodbc中不可用。
如何使用 turbodbc 访问多语句查询的第二部分?这似乎是一个相对简单的问题,但我已经把头撞在墙上几个小时了。