可以在CTE中使用带有DELETE FROM
子句的OUTPUT
吗?
要么不允许,要么我的语法错误。能够在CTE中捕获已删除的行非常方便,如下所示......
WITH DeletedItems AS (
DELETE FROM Foo
OUTPUT DELETED.*
)
SELECT *
FROM DeletedItems
冗余示例,但是能够使用这些已删除的项目来进一步获取其他行等等,作为其他CTE的一部分非常方便。
答案 0 :(得分:3)
SQL Server中不允许这样做。如果你尝试,你会得到:
关键字' DELETE'
附近的语法不正确
您可以使用如下。根本不需要CTE。
CREATE table Foo
(
Name varchar(10),
GroupId varchar(2)
)
GO
INSERT INTO Foo VALUES ('A', 'a'), ('B', 'b')
GO
DELETE FROM Foo
OUTPUT DELETED.*
WHERE GroupId = 'b'
输出:
Name GroupId
---------- -------
B b
(1 row affected)