-- 定義迴圈變數DECLARE @ROWS INT , @ROWS_Limit INT , @ROWS_BATCH INT , @ROWS_COUNT INT ;-- 設定迴圈變數參數SELECT @ROWS = 0 , @ROWS_Limit = 9517792 , @ROWS_BATCH = 1000 , @ROWS_COUNT = @ROWS_BATCH ; -- 建立暫存資料表變數,記錄運算元資料全部主索引值 IF OBJECT_ID('tempdb..#temp001') IS NOT NULL BEGIN DROP TABLE #temp001 END -- 建立暫存資料表變數,記錄每批次操作記錄主索引值IF OBJECT_ID('tempdb..#temp002') IS NOT NULL BEGIN DROP TABLE #temp002 ENDCREATE TABLE #temp001( TransactionNumber INT PRIMARY KEY , ) ; CREATE TABLE #temp002( TransactionNumber INT PRIMARY KEY ,) ; -- 按條件匯入需要操作資料的主索引值 INSERT INTO ##temp001 SELECT TransactionNumber FROM TABLE01 WHILE @ROWS_COUNT = @ROWS_BATCH AND @ROWS < @ROWS_Limit BEGIN; -- 遷移資料 INSERT INTO @TABLE01 A OUTPUT INSERTED.TransactionNumber INTO #temp002 SELECT TOP (@row_batch) FROM @TABLE02 INNER JOIN #temp001 C ON A.TransactionNumber = C.TransactionNumberWHERE InDate BETWEEN @FromDate AND @EndDate-- 刪除每批次遷移完成資料DELETE FROM #temp001 A WHERE TransactionNumber EXISTS(SELECT TOP 1 1 FROM #temp002 B WHERE A.TransactionNumber = B.TransactionNumber ) SELECT @row_count = @@ROWCOUNT , @ROWS = @ROWS + @row_count ; -- 截斷暫存資料表 TRUNCATE TABLE #temp002 WAITFOR DELAY '00:00:10' ; END ;在處理大資料量資料時,可以按照目前的方式批量處理資料