如何在 SQL 中使用输出子句将插入、更新、删除结果输出到新的临时表中



目前,我正在尝试在SQL Server中执行update(但它可能是任何支持output子句的DML语句),我想将输出放入本地临时表中,如下所示:

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可能是临时表

也就是说,我希望它像在select语句的 into 子句上一样工作,因为它只会创建表。

但是,我收到以下错误:

对象名称"#myTempTable"无效。

如何将output子句(inserteddeleted)的结果放入临时表中?

output 子句不会生成新表,因此您必须事先生成与 output 子句中指定的结构匹配的表,例如:

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

请注意,您不必使用上面的select into语法,create table同样有效。 最后,最简单的方法是创建一个与output子句中的字段匹配的空临时表。

创建表后,"对象名称无效"错误将消失,DML 语句将执行而不会出错(假设没有其他错误)。

最新更新