pypyodbc error Неправильное имя объекта для временной таблицы - PullRequest
1 голос
/ 10 марта 2019

Получение ошибки 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 () между двумя, но одинаковорезультат.

1 Ответ

1 голос
/ 10 марта 2019

Комментарий @ user3469050 относительно sql корректен. Вы должны быть в состоянии поместить оба оператора в один оператор выполнения

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
...