程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql游標使用示例代碼

sql游標使用示例代碼

編輯:關於SqlServer

一、游標的作用:
Select時,返回的是一個結果集,若需要為結果集返回的過程中,讀取到一行數據。需要對此行數據進行處理,比如按讀取到的數據作為查詢條件返回一個查詢結果集等等,應用都需要用到游標。
游標可允許 用戶 查詢下一行、上一行、第一行或最後一行,並對這些讀取到的行進行處理。
二、游標舉例

CREATE FUNCTION GetMRPlnFullBom  --創建一函數,根據單據電鍵查詢單據中每行,並對每行數據進行處理。   
(  
	@DocEntry int  
)  
RETURNS @TAB TABLE   -- 將最終查詢的結果集定義臨時表,返回。   
(  
    DocEntry int,  
    LineNum int,  
    LineNumLevel nvarchar(100),  
    ItmID nvarchar(20),   
    ItmName nvarchar(100),  
    LineType char(1),  
    Qty numeric(19,9),  
    BomLevel int,  
    ParentEntry int,  
    ParentItmID nvarchar(20),  
    TopEntry int,  
    TopItmID nvarchar(20) ,  
    BaseEntry int ,  
    BaseLineNum int ,  
    BaseType int  
)  
AS  
BEGIN  
     Declare  @ItmID varchar(50) , @Qty int ,@LineNum int ,@ObjType int   --聲明局部變量   
     --聲明一游標,聲明游標時 XXX前不能加@,比如下面的MRPlnA_ItmID ,格式是DECLARE XXX CURSOR FOR        
     DECLARE MRPlnA_ItmID CURSOR FOR   
     SELECT ItmID , Qty ,LineNum , ObjType FROM MRPlnA  Where DocEntry = @DocEntry --語句要在DECLARE XXX CURSOR FOR與OPEN XXX之間。   
     Open MRPlnA_ItmID      --打開游標   
     FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType --FETCH NEXT FROM 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,ItmName,LineType,Qty*@Qty,BomLevel,ParentEntry,   
                ParentItmID,TopEntry,TopItmID , @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       --關閉游標   
     DEALLOCATE MRPlnA_ItmID  --釋放游標   
     RETURN
END
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved