收到错误 pypyodbc.ProgrammingError :('42S02',“ [42S02] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称'#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()语句,但结果相同。
答案 0 :(得分:1)
@ user3469050对sql的注释是正确的。您应该能够将两个语句放入一个execute语句
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