6

目前,我正在尝试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 可能是一个临时表

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

但是,我收到以下错误:

无效的对象名称“#myTempTable”。

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

4

1 回答 1

12

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

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

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

创建表后,“Invalid object name”错误将消失,DML 语句将正常执行(假设没有其他错误)。

于 2012-05-31T18:18:04.007 回答