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

SQL Server - Does @@RowCount automatically commit transaction?

我正在审查开发人员的脚本,以删除超过指定日期的大型 table 中的所有数据。

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 循环?

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

简短的回答是否定的。因为没有 COMMIT TRANSACTION 关键字

样本为批量删除数据

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

当它退出循环时,我们 select 来自 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