【发布时间】:2019-03-09 21:51:40
【问题描述】:
收到错误 pypyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name '#responses_to_dedupe'.") 当试图查询临时表。我的实际查询要复杂一些,但这是得到相同结果的简化版本:
c.execute("""
SELECT ECR_ID, RespondentID, ? AS DestinationID,
TEIQuestionID, DateSubmitted
INTO #responses_to_dedupe
FROM ETLTEIConsumerResponses
WHERE DoNotProcess IS NULL;
""", [source['destinationid']])
c.execute("""
SELECT *
FROM #responses_to_dedupe;
""")
(请注意,错误消息之前的回溯显示了上述代码块的最后一行发生的攻击——“””)——而不是两个execute()中的第一个,所以我假设它创建表就好了。)
多年来,我在同一台机器/环境上的生产脚本中一直在做同样的事情,没有出现错误,甚至在此脚本的前面创建了另一个临时表并毫无意外地访问它。与这两种情况的唯一区别是临时表是使用驼峰式命名的——这个我用下划线全部小写。但是如果我将表的名称更改为#ResponsesToDedupe,仍然会得到相同的结果。
我也尝试了两者之间的 c.commit() 语句,但结果相同。
【问题讨论】:
-
我不了解 Python,但是,临时表仅在创建它的连接期间持续存在。查看您的代码示例,我猜这是 2 个单独的连接,因此在运行第二个命令时该表不存在。
标签: sql-server python-3.x pypyodbc