跳到主要內容

T-SQL Cursor

  declare @warrantFlag int
declare @msg varchar(10)
declare @sumOriginalExerciseRate float
declare @adjustedExerciseRate float
set @msg = 'normal'
--temptable
CREATE TABLE #tempTable1(
 tWarrantFlag1 int ,
 tSumOriginalExerciseRate float,
 tAdjustedExerciseRatefloat float
) ON [PRIMARY]
DECLARE  CURSOR1  CURSOR FOR
select WarrantFlag  from dbo.WarrantProfile group by WarrantFlag
OPEN  CURSOR1    --開啟CURSOR
FETCH NEXT FROM CURSOR1 INTO @warrantFlag
--
WHILE @@FETCH_STATUS = 0   --0 陳述式順利執行。-1 陳述式失敗,或資料列超出結果集。-2 擷取的資料列已遺漏。
BEGIN
     --do something
     select @sumOriginalExerciseRate = SUM(OriginalExerciseRate) from WarrantProfile where WarrantFlag = @warrantFlag
     select @adjustedExerciseRate = SUM(AdjustedExerciseRate) from WarrantProfile where WarrantFlag = @warrantFlag
     insert into #tempTable1(tWarrantFlag1,tSumOriginalExerciseRate,tAdjustedExerciseRatefloat)
     values(@warrantFlag,@sumOriginalExerciseRate,@adjustedExerciseRate)
   
        if @@ERROR >0  --若有錯誤產生
        BEGIN
       SELECT @msg = 'error'     
        END

        FETCH NEXT FROM CURSOR1  INTO  @warrantFlag   --將CURSOR中的下一筆資料 傳給宣告的變數
END
--
CLOSE   CURSOR1   --關閉CURSOR
DEALLOCATE  CURSOR1
select * from #tempTable1
select @msg
drop table #tempTable1