SQL Server-@@ RowCount是否自动提交事务?

时间:2018-10-29 15:19:33

标签: sql-server sqlperformance

我正在查看开发人员的脚本,以从早于指定日期的大型表中删除所有数据。

SET @R = 1;
WHILE @R > 0
    BEGIN
        ----Begin Transaction
        DELETE TOP (100000) FROM
        TBL_MYTABLE
        WHERE dateCreated < @DELETEDATE;

        ----Commit Transaction;
        SET @R = @@ROWCOUNT;

    END;

对我来说很突出的一件事是他正在检查@@ ROWCOUNT的值,而不用@R变量做任何事情。该语句是否自动提交交易?还是整个WHILE循环都必须先完成?

编辑:作为后续问题,我如何确定循环的每次迭代是否正在提交,或者是否一直等到结束?

1 个答案:

答案 0 :(得分:2)

简短的回答是:不,不是。因为没有COMMIT TRANSACTION关键字

该示例是批量删除数据。

这里是一个示例,我们可以看到当BREAK;的计数数量小于或等于2时,我设置了T

当它退出循环时,我们从T中选择数据,我们只能看到两行。

CREATE TABLE T(
    i int

);
INSERT INTO T values (1);
INSERT INTO T values (2);
INSERT INTO T values (3);
INSERT INTO T values (4);
INSERT INTO T values (5);

DECLARE @R INT = 1
SET @R = 1;
WHILE @R > 0
    BEGIN

        DELETE TOP (1) 
        FROM T


        SET @R = @@ROWCOUNT;

        IF((SELECT COUNT(*) FROM T)<= 2)
          BREAK;

END;

SELECT * FROM T

sqlfiddle