Table 使用 pyodbc 的值参数被忽略

Table Valued Parameter using pyodbc is Ignored

正在尝试将数据发送到接受 Table 值参数的存储过程,它既不执行任何操作也不 returns 任何错误。

    def InsertResults (self, dataset, name):

     try:
        sqlConn = self.sqlConnect()
        with sqlConn.cursor() as cursor:
            cursor.execute(f'CALL [dbo].[ImportAllocations] (?)', (dataset,))
            result = cursor.fetchall()
            print(result)
    except AssertionError as error:
        print(error)
    finally:
        print(f"Inserted data into {name}. Records inserted {len(dataset)}")  

我的数据在 DataFrame 中格式正确。

这是存储过程header:

CREATE PROC [dbo].[ImportAllocations](@DataTable [dbo].[udt_Allocation] READONLY)

查看SQL Profiler,似乎忽略了调用。我按照以下 issue 尝试了一些其他简单示例,并且效果很好。

如果您不关闭游标并在执行后提交,就会发生这种情况。确保你做到了

cursor.close()
connection.commit()

在 运行 cursor.execute() 之后。

在存储过程中你必须确保添加了 SET NOCOUNT ON 否则你将不会得到任何返回到 Python

的结果

问题出在 pandas 数据框上。一旦转换为没有索引的单个元素的元组,这将起作用。

listTuple = list(dataset.itertuples(index=False)) 
cursor.execute(f'EXEC {name} ?', (listTuple,))