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
我正在审查开发人员的脚本,以删除超过指定日期的大型 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