DELETE ... OUTPUT COUNT(DELETED.*)

Ale*_*der 2 sql sql-server output-clause

我想知道在某个DELETE操作中删除了多少行.

我把微软例B

DELETE Sales.ShoppingCartItem
OUTPUT DELETED.* 
WHERE ShoppingCartID = 20621;
Run Code Online (Sandbox Code Playgroud)

并尝试修改它只返回count已删除的记录:

DELETE FROM datacache 
OUTPUT COUNT(DELETED.*)
WHERE userId=@id
Run Code Online (Sandbox Code Playgroud)

但这引发了

ExceptionMessage: "Incorrect syntax near '*'."
ExceptionType: "System.Data.SqlClient.SqlException"
Message: "Error"
Run Code Online (Sandbox Code Playgroud)

所以我试过了

DELETE FROM datacache 
OUTPUT COUNT(DELETED)
WHERE userId=@id
Run Code Online (Sandbox Code Playgroud)

哪个扔了

ExceptionMessage: "Invalid column name 'DELETED'."
ExceptionType: "System.Data.SqlClient.SqlException"
Message: "Error"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Sim*_*one 7

只需运行您的查询并获取修改后的行

DELETE 
FROM datacache 
WHERE userId=@id

SELECT @@ROWCOUNT
Run Code Online (Sandbox Code Playgroud)


Gio*_*uri 5

您不能在OUTPUT子句中使用聚合.您可以将任何列输出到表变量中,并从那里开始计数:

DECLARE @t TABLE(id int)

DELETE FROM Sales.ShoppingCartItem
OUTPUT Deleted.ShoppingCartID INTO @t
WHERE ShoppingCartID = 20621;

SELECT COUNT(*) FROM @t
Run Code Online (Sandbox Code Playgroud)