Как использовать предложение вывода в 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 будет выполнена без ошибок (при условии, что других ошибок нет).