可以在CTE中使用DELETE FROM吗?

时间:2018-05-07 03:21:53

标签: sql-server

可以在CTE中使用带有DELETE FROM子句的OUTPUT吗?

要么不允许,要么我的语法错误。能够在CTE中捕获已删除的行非常方便,如下所示......

WITH DeletedItems AS (
  DELETE FROM Foo
  OUTPUT DELETED.*
)
SELECT *
FROM DeletedItems

冗余示例,但是能够使用这些已删除的项目来进一步获取其他行等等,作为其他CTE的一部分非常方便。

1 个答案:

答案 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)