Примерно так:
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
Редактировать: Это будет работать только в 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
И ... Простая модель восстановления означает, что журнал будет усекаться на контрольных точках, а не только при резервном копировании журнала.