一、遊標的作用:
Select時,返回的是一個結果集,若需要為結果集返回的過程中,讀取到一行資料。需要對此行資料進行處理,例如按讀取到的資料作為查詢條件傳回查詢結果集等等,應用程式都需要用到遊標。
遊標可允許 使用者 查詢下一行、上一行、第一行或最後一行,並對這些讀取到的行進行處理。
二、遊標舉例
CREATE FUNCTION GetMRPlnFullBom --建立一函數,根據單據電鍵查詢單據中每行,並對每行資料進行處理。
(
@DocEntry int
)
(
DocEntry int,
LineNum int, 🎠 LineNum int, ItmID nvarchar(20),
ItmName nvarchar(100),
LineType char(1), 19,9),
BomLevel int,
ParentEntry int,
int, TopItmID nvarchar(20) , BaseType int ) AS BEGIN Declare @ItmID varchar(50)¢--聲明一遊標,聲明遊標時 XXX前不能加@,例如下面的MRPlnA_ItmID ,格式是DECLARE XXX CURSOR FOR
DECLARE MRPlnA_ItmID CURSORQFOR jType FROM MRPlnA Where DocEntry = @DocEntry --語句要在DECLARE XXX CURSOR FOR與OPEN XXX之間。
Open MRPlnA_ItmID --開啟遊標
FETCH NEXT FROM MRPln XXX INTO ... 更新遊標指定記錄即換行,並將Select出來的數據,存入臨時變數中。 FETCH格式上除了NEXT還有PRIOR、FRIST、LAST。分別是上一行、第一行及最後一行。
WHILE @@FETCH_STATUS = 0 --@@FETCH_STATUS全域變量,用於查詢FETCH最後一次狀態,控制循環。當讀取完時是0,讀取失敗是-1,記錄被刪除是-2。
BEGIN
Insert Into @TAB
Select DocEntry,LineNum,LineNumLevel,ItmID,IName,LineType,Qty* opItmID , @DocEntry SourceEntry ,@LineNum BaseLineNum ,@ ObjType BaseType
From GetBomFullItems(@ItmID, 'V 1.0', GetDate()) TD --GetBomFULLItmes是另一個查詢函數。
FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType -- Select移到下一行。
END
CLOSE MRPlnA_ItmID --關閉遊標
END