前言:
這篇是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

011  



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

12311

簡單地說,程式宣告Cursor後把查詢結果放入並打開Cursor (Open MyCursor),用FETCH NEXT FROM MyCursor 把Cursor讀出需要的欄位,處理資料後再關閉cursor。這個程式雖然簡單,一般預存程序多半會看到迴圈,因此這很常見的情況。cursor的目的是讀取查詢資料表的內容,這裡沒有附該資料表的內容,只是單純顯示該資料的id,其餘欄位以此類推。至於上述程式的執行結果如下:

ASDF


總結:
1、迴圈的用法與範例,WHILE......
2、cursor的用法與範例程式,
第一個FETCH NEXT FROM MyCursor INTO @id, @article省略的話程式無法執行
第二個FETCH NEXT FROM MyCursor INTO @id, @article省略的話會變無窮迴圈
3、

arrow
arrow

    貓羽 發表在 痞客邦 留言(0) 人氣()