Как использовать предложение вывода в SQL для вывода вставки, обновления, удаления результатов в новую временную таблицу?

В настоящее время я пытаюсь выполнить update в SQL Server (но это может быть любой оператор DML, который поддерживает output и я хотел бы поместить вывод в локальную временную таблицу, вот так:

update
    dbo.MyTable
set
    MyField = 30
output
    inserted.MyKeyField
into
    #myTempTable
from
    dbo.MyTable as t
where
    f.MyFilteredField = 8 

Я знаю, что синтаксис правильный, согласно документации для output пункт (выделение мой):

output_table

Задает таблицу, в которую возвращенные строки вставляются, а не возвращаются вызывающей стороне. output_table может быть временной таблицей.

Тем не менее, я ожидаю, что это будет работать так же, как это было бы на into пункт о select утверждение в том, что это просто создаст таблицу.

Однако я получаю следующую ошибку:

Неверное имя объекта "#myTempTable".

Как я могу получить результаты output пункт (inserted или же deleted) во временную таблицу?

1 ответ

Решение

output предложение не будет генерировать новую таблицу, поэтому вы должны заранее сгенерировать таблицу, которая соответствует структуре того, что указано в output пункт, например:

select t.MyKeyField into #myTempTable from dbo.MyTable as t where 1 = 0

Обратите внимание, вам не нужно использоватьselect intoсинтаксис выше,create table работает так же хорошо. В конце концов, проще всего создать пустую временную таблицу, которая соответствует полям в вашем output пункт.

После создания таблицы ошибка "Недопустимое имя объекта" исчезнет, ​​и инструкция DML будет выполнена без ошибок (при условии, что других ошибок нет).

Другие вопросы по тегам