前言
雖然網路範例非常多,但之前在回答新手問題時,丟了一些範例連結給他,他還是看不太懂,後來就自己寫了一個範例加註釋,終於讓他瞭解並應用,所以我想試著用自己的解釋方式紀錄下來,提供給一些還不熟悉的初心者。
Cursor(資料指標)
常常我們都會在程式撰寫迴圈,在SQL裡面就是使用Cusor,Cursor會先從資料庫裡面讀出資料,暫存於tempDB資料庫內,再從tempDB逐筆讀出處理,就因為有寫入tempDB的動作,所以使用上也要注意,譬如我看過明明就能用update語法直接處理掉的程式,還使用Cusor逐筆跑出去update,這種影響效能就會非常巨大。
一個簡單的Cursor範例
--定義Cursor並打開
DECLARE MyCursor Cursor FOR --宣告,名稱為MyCursor
-- 此區段就可以撰寫你的資料集,如找出名稱為John的資料
select id from tableA where name like '%John%'
Open MyCursor
print @@CURSOR_rows --查看總筆數
--定義ID變數
declare @id varchar(25) --用來存放ID的變數
--開始迴圈跑Cursor Start
Fetch NEXT FROM MyCursor INTO @id
While (@@FETCH_STATUS <> -1)
BEGIN
--此區塊就可以處理商業邏輯,譬如利用tableA的ID將資料塞入tableB
insert into tableB
select top 1 * from tableA where id=@id
Fetch NEXT FROM MyCursor INTO @id
END
--開始迴圈跑Cursor End
--關閉&釋放cursor
CLOSE MyCursor
DEALLOCATE MyCursor
--
Reference
http://sharedderrick.blogspot.tw/2013/02/cursors-rowsets.html
沒有留言:
張貼留言