2013年12月7日 星期六

[MS SQL]寫給新手的Cursor小筆記

前言

雖然網路範例非常多,但之前在回答新手問題時,丟了一些範例連結給他,他還是看不太懂,後來就自己寫了一個範例加註釋,終於讓他瞭解並應用,所以我想試著用自己的解釋方式紀錄下來,提供給一些還不熟悉的初心者。

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

沒有留言:

張貼留言