2016年7月22日 星期五

SQL 跑迴圈

【迴圈的計數方式純次數】
如果要像程式語言
FOR (INT i = 0; i<= 10; i++)
{
}

可以寫成
DECLARE @i INT
DECLARE @LoopCount INT
SET @i = 0
SET @LoopCount = 10
WHILE (@i <= @LoopCount)
BEGIN
    -- 做想做的事
SET @i = @i +1
END

【迴圈的計數方式是從資料表來的】
假設查詢出來的資料表有兩個欄位(Col1, Col2),這兩個欄位在迴圈中都要使用
-- 先定義兩個變數,用來存放每列的 Col1、Col2 的資料
DECLARE @Col1 INT(50)
DECLARE @Col2 NVARCHAR(50)

-- 定義一個指標MyCursor 給 查詢出來的資料表
DECLARE MyCursor CURSOR FOR
SELECT Col1, Col2 FROM Table1

-- 開啟指標
OPEN MyCursor

-- 取出第一筆指標,將指標內的資料塞入變數(指標內的資料需照欄位順序給)
FETCH NEXT FROM MyCursor INTO @Col1, @Col2
WHILE @@FETCH_STATUS = 0 -- 當取出指標中的資料成功時
  BEGIN
                // 這邊就可以針對每筆資料做什麼事
                PRINT @Col1;  // 比方直接顯示出來
                PRINT CONCAT(@Col1, @Col2); // 比方把兩個資料的變數串在一起

                 // 取出下一筆指標,並將指標內的資料塞入變數
  FETCH NEXT FROM MyCursor INTO @Col1, @Col2
  END
CLOSE MyCursor -- 關閉指標
DEALLOCATE MyCursor -- 移除指標參考

沒有留言:

張貼留言