带有 UPDATE FROM 的 OUTPUT 子句

Aka*_*ash 0 sql-server

在下面的代码中,按OUTPUT Updated.*原样执行时失败,但删除FROM中的UPDATE并将其替换为静态值可以正常工作。OUTPUT与 一起使用时是否需要不同的语法UPDATE FROM

 USE SCRATCH

 CREATE TABLE Tab1(a char(10))
 CREATE TABLE Tab2(a char(10))
 CREATE TABLE Tab3(a char(10))

 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')
 INSERT INTO Tab1(a) values ('a')

 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')
 INSERT INTO Tab2(a) values ('a')

 UPDATE T1
 SET T1.a = T2.a
 FROM Tab1 T1 JOIN Tab2 T2 ON T1.a = T2.a
 OUTPUT Updated.*
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

Msg 102, Level 15, State 1, Line 22
Incorrect syntax near 'OUTPUT'.
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 11

不,这是相同的语法

output后仍立即去set

虽然没有updated可用的桌子。

UPDATE T1
SET T1.a = T2.a
OUTPUT INSERTED.*,DELETED.*
FROM Tab1 T1 JOIN Tab2 T2 ON T1.a = T2.a
Run Code Online (Sandbox Code Playgroud)