前言:
這篇是MSSQL預存程序迴圈與Cursor的範例,這裡稍微從相關部落格蒐集資料後稍加修改,並簡單說明程式的用途。聽說只要學到if和回圈就算學會了預存程序,因此就寫到這邊,有機會再寫更進階的來研究。
1、迴圈
這個是找部落格文章稍微修改,雖說如此這個程式很簡單,於是就放這邊參考了,可以觀察每一行的執行結果,下圖是執行結果。
DECLARE @_i INT
DECLARE @_MAX INT
SET @_i = 0
SET @_MAX = 10
WHILE (@_i<@_MAX)
BEGIN
PRINT '* ' + CONVERT(varchar(10),@_i)
Set @_i=@_i+1
END
2、Cursor(資料指標)
這也是SQL常見到的語法,它是資料表資料的讀取器,常見的用法是寫WHILE迴圈把資料讀出來,通常用於讀取所有查到的資料,方式如下所述。
宣告的程式碼省略,這裡看主程式:
DECLARE MyCursor Cursor FOR
--查詢語法
SELECT [id],[article] FROM [dbo].[test_talk]
Open MyCursor
declare @id int
declare @article varchar(100)
--開始迴圈跑Cursor Start
--這行是為了讓@@FETCH_STATUS為0進行後續動作
FETCH NEXT FROM MyCursor INTO @id, @article
WHILE @@FETCH_STATUS = 0
BEGIN
--主要程式區段,這裡只顯示資料
print '--------' + CONVERT(varchar(10), @id)
FETCH NEXT FROM MyCursor INTO @id, @article
END
--顯示該資料表的總筆數
print '-總筆數-' + CONVERT(varchar(10), @id)
--關閉釋放cursor
CLOSE MyCursor
DEALLOCATE MyCursor
簡單地說,程式宣告Cursor後把查詢結果放入並打開Cursor (Open MyCursor),用FETCH NEXT FROM MyCursor 把Cursor讀出需要的欄位,處理資料後再關閉cursor。這個程式雖然簡單,一般預存程序多半會看到迴圈,因此這很常見的情況。cursor的目的是讀取查詢資料表的內容,這裡沒有附該資料表的內容,只是單純顯示該資料的id,其餘欄位以此類推。至於上述程式的執行結果如下:
總結:
1、迴圈的用法與範例,WHILE......
2、cursor的用法與範例程式,
第一個FETCH NEXT FROM MyCursor INTO @id, @article省略的話程式無法執行
第二個FETCH NEXT FROM MyCursor INTO @id, @article省略的話會變無窮迴圈
3、
留言列表