# 以SQL語法分批搬移大量資料 用SQL語法,為特定條件下的資料進行批次處理。 避免過量的transaction產生。 ``` sql= DECLARE @amt INT = 0; WHILE EXISTS ( SELECT TOP 1 1 FROM RequestLog WHERE LogTime >= '2021-01-01' AND LogTime < '2022-01-01' ) BEGIN -- 開始transaction控制 BEGIN TRANSACTION; BEGIN TRY -- 進行搬移 INSERT INTO Log2021.dbo.RequestLog SELECT TOP 50000 * FROM RequestLog WHERE LogTime >= '2021-01-01' AND LogTime < '2022-01-01' ORDER BY LogTime; -- 進行刪除 WITH T AS (SELECT TOP 50000 * FROM RequestLog WHERE LogTime >= '2021-01-01' AND LogTime < '2022-01-01' ORDER BY LogTime) DELETE T; COMMIT TRANSACTION; set @amt = @amt + 50000; print(getdate()); -- print 已處理筆數 print(@amt); END TRY BEGIN CATCH ROLLBACK TRANSACTION; PRINT ERROR_MESSAGE(); PRINT ERROR_PROCEDURE(); PRINT ERROR_LINE(); END CATCH END ```