天天看點

MSSQL一種取代遊标的方案

原文: MSSQL一種取代遊标的方案 今天看到一篇文章寫的自己整理記錄下,據說比用遊标快。

DECLARE @字段1 資料類型;
DECLARE @字段2 資料類型;

DECLARE @TMP_WHILE_ID INT;
SELECT TMP_WHILE_ID=IDENTITY(INT,1,1),TMP_WHILE_FLAG=0,

[字段1],[字段2],...

INTO #TMP_WHILE FROM [表名] WHERE [條件]....;

SELECT @TMP_WHILE_ID=MIN(TMP_WHILE_ID) FROM #TMP_WHILE WHERE TMP_WHILE_FLAG=0;
WHILE @TMP_WHILE_ID IS NOT NULL
BEGIN
    --擷取目前處理行的資訊
    SELECT @字段1=字段1,@字段2=字段2,... FROM #TMP_WHILE WHERE TMP_WHILE_ID=@TMP_WHILE_ID;
    
    --<這裡自己的處理過程>
    
    --辨別目前行已處理完畢
    UPDATE #TMP_WHILE SET TMP_WHILE_FLAG=1 WHERE TMP_WHILE_ID=@TMP_WHILE_ID;
    --選擇下一行号
    SELECT @TMP_WHILE_ID=MIN(TMP_WHILE_ID) FROM #TMP_WHILE WHERE TMP_WHILE_FLAG=0 AND TMP_WHILE_ID>@TMP_WHILE_ID;
END
DROP TABLE #TMP_WHILE;