Ric*_*cky 5 sql sql-server sql-server-2000
我们想要删除表中大量过时的数据,但这会锁定表很长一段时间。是否可以使用 Cursor 在 while 循环中删除每个事务一百条记录?
我可以在哪里参考该示例?
像这样的东西:
DECLARE @stillgoing bit;
SET @stillgoing = 1;
WHILE @stillgoing = 1
BEGIN
DELETE TOP (100) YourTableName
WHERE IsObsolete = 1;
IF @@ROWCOUNT = 0
SET @stillgoing = 0;
CHECKPOINT /* Will encourage the log to clear if it's in Simple recovery model */
END
Run Code Online (Sandbox Code Playgroud)
编辑:这仅适用于 SQL 2005 及更高版本。正如我们刚刚了解到的,它是 SQL 2000,代码如下:
DECLARE @stillgoing bit
SET @stillgoing = 1
SET ROWCOUNT 100
WHILE @stillgoing = 1
BEGIN
DELETE YourTableName
WHERE IsObsolete = 1
IF @@ROWCOUNT = 0
SET @stillgoing = 0
CHECKPOINT /* Will encourage the log to clear if it's in Simple recovery model */
END
Run Code Online (Sandbox Code Playgroud)
并且...简单恢复模型意味着日志将在检查点上截断,而不是仅在备份日志时截断。