我有一个删除某些记录的存储过程。我需要获取已删除记录的数量。
我试着这样做:
DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID
SELECT @@ROWCOUNT AS DELETED;
但DELETED显示为0,但删除了相应的记录。我试过了SET NOCOUNT OFF;没有成功。能否请你帮忙? 感谢。
答案 0 :(得分:34)
这应该可以正常工作。 NOCOUNT
的设置无关紧要。
你们两人之间是否有任何陈述?在每个语句之后重置@@ROWCOUNT
,因此您必须立即检索该值而不插入任何语句。
答案 1 :(得分:2)
我在调试存储过程时使用此代码片段来验证操作后的计数,例如delete:
DELCARE @Msg varchar(30)
...
SELECT @Msg = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' rows affected'
RAISERROR (@Msg, 0, 1) WITH NOWAIT
答案 2 :(得分:-6)
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服务器,但在MySQL SELECT count(*) FROM ...
中是一个非常便宜的操作。