【发布时间】:2015-03-04 17:16:58
【问题描述】:
我正在此连接中创建一个#Temp 表,然后尝试将其转换为用户定义的表类型并将其传递给存储过程。这在 Microsoft SQL Server Management Studio 中运行良好,但我无法使用 pyodbc 在 python 中运行。
SET NOCOUNT ON;
USE TestDB
DECLARE @Temp as dbo.TempType;
INSERT INTO @Temp SELECT * FROM #Temp;
SELECT * FROM @Temp;
(在实际代码中,最后的 select 语句将是存储过程,但在测试中我试图让它工作)。尝试在游标上执行 fetchall 返回:
Traceback (most recent call last):
File "C:\Anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 2883, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-237-dfc0750240b3>", line 1, in <module>
dt = cur.fetchall()
ProgrammingError: No results. Previous SQL was not a query.
在同一个连接中,我可以 SELECT * FROM #Temp 就好了——但转换为表类型似乎不允许我选择。有什么想法吗?
【问题讨论】:
-
我不太使用 pyodbc,但一个可能的原因是您需要在 INSERT 语句之后的连接上执行
.commit(),然后才能执行 SELECT 语句。 -
我无法重现您的问题。如果您想自己尝试一下,我已经粘贴了我的测试代码here。
-
我不知道如果它是在 SP 之外创建的,我可以在 SP 中使用 #Temp 表——现在我完全摆脱了表类型,因为我需要它的唯一原因(或这么认为)是将临时表传递给 SP。我认为你在 SP 中声明 @Temp 并填充它对我有用,因为现在服务器正在运行,所以我会在下周尝试,尽管在 SP 中使用 #Temp 是可行的,所以我我准备好了——谢谢!
标签: python sql-server ssms pyodbc