2016-08-25 52 views
0

如何過早地獲得光標上的最後一次迭代,以便將其與值進行比較,並在符合條件時中斷。如何過早地獲得遊標中的最後一次迭代?

OPEN lcr_trans 
    FETCH NEXT FROM lcr_trans INTO @trans_time , @machine_id , @trans_camp_code; 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    IF(cast(@shift_start_time as time)<>'00:00:00.0000000' AND (cast(@shift_end_time as time)<>'00:00:00.0000000') ) 
    BEGIN 

     SELECT TOP 1 @CompareWeekend= transtime_out from overtime where emp_num = @emp_num and trans_date = @previous_date; 

     IF(@CompareWeekend = @trans_time) 
     BEGIN 
      BREAK; 
     END 
    END 
    -- The Cursor -- 
    -- ----  -- 
     FETCH NEXT FROM lcr_trans INTO @trans_time , @machine_id , @trans_camp_code; 
    END 
    close lcr_trans; 
    DEALLOCATE lcr_trans; 

我想最後@trans_time在迭代與我的變量比較。 @CompareWeekend

+0

你不能檢查光標btw外的情況嗎?節省您一些時間和I/O。 – NickyvV

回答

1

你可以在光標最後一行與LAST關鍵字(source):

FETCH LAST FROM lcr_trans INTO @trans_time , @machine_i , @trans_camp_code; 
+0

如何在我的環境中使用它?我只是想在if條件中使用它,不要混淆循環 –

+0

如果你用'SCROLL'選項聲明'CURSOR',你可以首先檢查最後一條記錄的條件,然後返回到'FIRST'記錄。 [檢查在這裏的評論](https://msdn.microsoft.com/en-us/library/ms180152.aspx#Anchor_2) – NickyvV

+0

你可以用你的部分重寫我的光標 –

2

試試這個:

declare @last_trans_time datetime, @last_machine_i varchar(max), @last_trans_camp_code varchar(max); 
    OPEN lcr_trans 
     FETCH LAST FROM lcr_trans INTO @last_trans_time , @last_machine_i , @last_trans_camp_code; 

     FETCH NEXT FROM lcr_trans INTO @trans_time , @machine_id , @trans_camp_code; 
     WHILE @@FETCH_STATUS = 0 
     BEGIN 
      IF(cast(@shift_start_time as time)<>'00:00:00.0000000' AND (cast(@shift_end_time as time)<>'00:00:00.0000000') ) 
      BEGIN 

      SELECT TOP 1 @CompareWeekend= transtime_out from overtime where emp_num = @emp_num and trans_date = @previous_date; 

      IF(@CompareWeekend = @trans_time) 
      BEGIN 
       BREAK; 
      END 
      END 
      FETCH NEXT FROM lcr_trans INTO @trans_time , @machine_id , @trans_camp_code; 
     END 
    CLOSE lcr_trans; 
    DEALLOCATE lcr_trans; 

你可以閱讀更多關於遊標位置: https://msdn.microsoft.com/en-us/library/ms180152.aspx

相關問題