Sql server 如何获取已删除记录的数量?

Sql server 如何获取已删除记录的数量?,sql-server,Sql Server,我有一个删除某些记录的存储过程。我需要获取已删除记录的数量 我试着这样做: DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID SELECT @@ROWCOUNT AS DELETED; 但已删除的记录显示为0,但相应的记录已删除。我试着不计较;没有成功。你能帮忙吗? 谢谢。那应该可以。NOCOUNT的设置不相关。这只影响发送回客户端的受影响的n行信息,对@@ROWCOUNT的工作没有影响 你所展示的

我有一个删除某些记录的存储过程。我需要获取已删除记录的数量

我试着这样做:

DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID   
SELECT @@ROWCOUNT AS DELETED;            
但已删除的记录显示为0,但相应的记录已删除。我试着不计较;没有成功。你能帮忙吗?
谢谢。

那应该可以。
NOCOUNT
的设置不相关。这只影响发送回客户端的受影响的
n行
信息,对
@@ROWCOUNT
的工作没有影响

你所展示的两种语言之间有什么区别吗<代码>@@ROWCOUNT在每条语句之后都会重置,因此必须立即检索该值,而不需要任何中间语句

START TRANSACTION;
SELECT @before:=(SELECT count(*) FROM OperationsV1.dbo.Files);
DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID;
SELECT @after:=(SELECT count(*) FROM OperationsV1.dbo.Files);
COMMIT;
SELECT @before-@after AS DELETED;

我不知道SQL server,但在MySQL中,从…中选择计数(*)是一个非常便宜的操作。

我在调试存储过程时使用此代码段来验证操作后的计数,例如删除:

DECLARE @Msg varchar(30)
...
SELECT @Msg = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' rows affected'
RAISERROR (@Msg, 0, 1) WITH NOWAIT

不,两者之间没有任何区别。你是如何测试的?在管理工作室?对不起,这是我的错。我将SELECT@@ROWCOUNT设置为已删除;在一个错误的删除语句之后。谢谢Eugen。让我们看看是否有人能解释为什么@ROWCOUNT对我不起作用。如果没有人在@ROWCOUNT上提供帮助,我将使用您的解决方案。在默认事务隔离级别下,这仍然允许另一次删除在查询过程中更改计数。@David-不要使用此选项。这是一个昂贵且有竞争条件的问题。此问题清楚地标记为
sql server
。不要急于否决它,因为它使用MySQL特定的语法。同意@MartinSmith。“极其便宜的操作”的值为负1。如何处理从
中获得的值。@@ROWCOUNT
?你想退货吗??您可能需要使用
DECLARE@DeleteCnt INT;选择@DeleteCnt=@@ROWCOUNT
将值捕获到一个变量中,然后您可以将该变量返回或插入到审核表或一些对我有用的东西中!!