[MS SQL] Fetch cursor

其實不太懂為什麼在WHILE裡為什麼要FETCH第二次呢?

沒寫過MS SQL的procedure

所以連宣告...cursor...fetch都不會寫

Sample code如下:

 

ALTER PROCEDURE [dbo].[P_ACCT_SET_SEQ_ADDR]
AS
 
  DECLARE @v_seq_num int
  DECLARE @v_contact_zip1 varchar(10), @contact_addr1 nvarchar(150)
  DECLARE @permanent_zip varchar(10),  @permanent_addr nvarchar(150)
 
declare addr_cursor scroll cursor for 
     SELECT TOP 10 seq_num, contact_zip1, contact_addr1, permanent_zip, permanent_addr
     FROM customer
    ORDER BY seq_num
 
OPEN addr_cursor
FETCH NEXT FROM addr_cursor INTO @v_seq_num, @v_contact_zip1, @contact_addr1, @permanent_zip, @permanent_addr
WHILE @@FETCH_STATUS = 0
  BEGIN
    print @v_seq_num
    FETCH NEXT FROM addr_cursor INTO @v_seq_num, @v_contact_zip1, @contact_addr1, @permanent_zip, @permanent_addr
  END
CLOSE addr_cursor
DEALLOCATE addr_cursor  
 
其實不太懂為什麼在WHILE裡為什麼要FETCH第二次呢?
查了一下,FETCH 的相關描述
 
FETCH NEXT
在目前資料列之後立即傳回結果資料列,並將目前資料列遞增到傳回的資料列。如果 FETCH NEXT 是針對資料指標的第一項提取,它會傳回結果集中的第一個資料列。NEXT 是預設資料指標提取選項。
 
備註
@@FETCH_STATUS 函數會報告最後一個 FETCH 陳述式的狀態。相同的資訊記錄在 sp_describe_cursor 傳回之資料指標的 fetch_status 資料行中。試圖在 FETCH 陳述式傳回的資料上執行任何作業之前,您應該先利用這個狀態資訊來判斷這項資料是否有效。如需詳細資訊,請參閱<@@FETCH_STATUS (Transact-SQL)>。
 
所以我想...FETCH NEXT的用法有點類似rs.MoveNext