1.遊标是什麼
遊标是SQL Server的一種資料通路機制,它允許使用者通路單獨的資料行。使用者可以對每一行進行單獨的處理,進而降低系統開銷和潛在的阻隔情況,使用者也可以使用這些資料生成的SQL代碼并立即執行或輸出。
2.遊标的優點
SELECT 語句傳回的是一個結果集,但有時候應用程式并不總是能對整個結果集進行有效地處理,遊标便提供了這樣一種機制,它能從包括多條記錄的結果集中每次提取一條記錄,遊标總是與一跳SQL選擇語句相關聯,由結果集和指向特定記錄的遊标位置組成。使用遊标具有一下優點:
(1).允許程式對由SELECT查詢語句傳回的行集中的每一次執行相同或不同的操作,而不是對整個集合執行同一個操作。
(2).提供對基于遊标位置中的行進行删除和更新的能力。
(3).遊标作為資料庫管理系統和應用程式設計之間的橋梁,将兩種處理方式連接配接起來。
3.遊标的使用
3.1聲明遊标
DECLARE 遊标名 CURSOR
3.2打開遊标
open 遊标名
3.3擷取遊标資料,當遊标被打開時,行指針将指向該遊标集第1行之前,如果要讀取遊标集中的第1行資料,必須移動行指針使其指向第1行
FETCH NEXT FROM 遊标名
3.4關閉遊标/删除遊标
CLOSE 遊标名 --關閉遊标
DEALLOCATE 遊标名 --删除遊标
3.5操作遊标
DECLARE E1cursor cursor --聲明遊标,預設為FORWARD_ONLY遊标
FOR SELECT * FROM c_example
OPEN E1cursor --打開遊标
FETCH NEXT from E1cursor --讀取第1行資料
WHILE @@FETCH_STATUS = 0 --用WHILE循環控制遊标活動
BEGIN
FETCH NEXT from E1cursor --在循環體内将讀取其餘行資料
END
CLOSE E1cursor --關閉遊标
DEALLOCATE E1cursor --删除遊标
4.執行個體一
DECLARE cur_temp_objectid CURSOR FOR
SELECT
ObjectId,
TxCode,
LOP,
CmpTime
FROM #temp_objectid
OPEN cur_temp_objectid
FETCH NEXT FROM cur_temp_objectid INTO
@temp_objectid,
@temp_txcode,
@temp_lop,
@temp_cmptime
WHILE (@@FETCH_STATUS <> -1)
BEGIN
DELETE FROM #temp_wimovements
INSERT INTO #temp_wimovements
SELECT
Object_ID,
......
JobStatus
FROM RPT_WITAT_WIMOVEMENTS (NOLOCK)
WHERE InsTimeStamp <= @temp_cmptime
AND Object_ID = @temp_objectid
END
CLOSE @return_cursor --關閉遊标
DEALLOCATE @return_cursor --釋放遊标
執行個體二
DECLARE @return_cursor CURSOR --聲明遊标@return_cursor
DECLARE @temp_error_objectid char(15)
EXEC SP_DEL_ERROR_OBJID
@StartDate,
@EndDate,
@return_cursor OUTPUT --執行其他SP,傳回@return_cursor
FETCH NEXT FROM @return_cursor INTO --從@return_cursor獲得一個值賦給@temp_error_objectid
@temp_error_objectid
WHILE (@@FETCH_STATUS <> -1) --循環
BEGIN
-- delete error objectId
delete from #temp_objectid where ObjectID = @temp_error_objectid --執行sql
FETCH NEXT FROM @return_cursor INTO --再從@return_cursor擷取下一個值重新賦給@temp_error_objectid
@temp_error_objectid
END -- WHILE (@@FETCH_STATUS <> -1)
CLOSE @return_cursor --關閉遊标
DEALLOCATE @return_cursor --釋放遊标
5.參考連結:
SQL Server基礎之遊标---阿赫瓦裡
SQLServer遊标(Cursor)簡介和使用說明 及全局變量說明和功能---zzy7075