接收错误 pypyodbc.programmingerror :('42S02'," [42S02] [Microsoft] [ODBC SQL Server driver] [SQL Server] [SQL Server]。")试图查询临时表格时。我的实际查询更为复杂,但这是获得相同结果的沸腾版本:
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;
""")
(请注意,在错误消息之前的追溯显示在上述代码块的最后一行上发生的犯罪 - ")创建表格很好。)
在同一机器/环境上的生产脚本中,我已经做了完全相同的事情,而没有错误,甚至在此脚本中更早创建另一个临时表,并且没有发病率访问它。与这两种情况的唯一区别在于,临时表是使用骆驼盒命名的 - 我所有的情况下的情况下都命名为下划线。但是,如果我将表名的名称更改为#ResponSestoDedupe。
,仍然会得到相同的结果。我还尝试了两者之间的c.mommit()语句,但结果相同。
@user3469050的评论是正确的。您应该能够将两个语句放入一个执行语句
中c.execute("""
WITH responses_to_dedupe_cte
AS
(
SELECT ECR_ID, RespondentID, ? AS DestinationID,
TEIQuestionID, DateSubmitted
FROM ETLTEIConsumerResponses
WHERE DoNotProcess IS NULL
)
SELECT * FROM responses_to_dedupe_cte
""", [source['destinationid']])
否则,您可以使用全局临时表,但我通常会回避。
##responses_to_dedupe