举例:declare  cursor_insert cursor for select c# from cs
declare
@i int
open cursor_insert
fetch cursor_insert into @i
while @@fetch_status=0
begin
  print @i
  fetch cursor_insert into @i
end
close cursor_insert
deallocate cursor_insert

解决方案 »

  1.   

    fetch next from xxx into @xx--这句话是一定要加的么?
    是提取当前的记录值到@xx中while @@FETCH_STATUS = 0
    是判断提取是否成功
      

  2.   

    open xxx(游标名) 
    fetch next from xxx into @xx--这句话是一定要加的么?
    while @@FETCH_STATUS = 0
      begin
       ...
      end
      fetch next from  xxx  <<=======这里你写错了,这句应该在while里面,要不然你是死循环
    end
    close  xxx 
    deallocate  xxx
      

  3.   

    DECLARE item_group CURSOR FOR
    select column_id from t_table
    IF @@error <> 0 
       GOTO Closing_CursorOPEN item_group
    FETCH column_id INTO @ls_id
    WHILE (@@FETCH_STATUS = 0)   
    BEGIN
       //此处处理
       FETCH FETCH column_id INTO @ls_id
    END
    CLOSE item_group
    DEALLOCATE item_group
      

  4.   

    谢谢pengdali(大力 V2.0)
    那就是说循环写的基本是对的?每次都要加 fetch next from  xxx into xx
    那写fetch first from  xxx into xx 和fetch last from  xxx into xx
    是不是一样啊?那非空那个呢?除了 fetch next from  xxx放while里面
    那样判断非空对不对?
      

  5.   

    不一样:示例
    A. 在简单的游标中使用 FETCH
    下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回由 DECLARE CURSOR 指定的列的值。USE pubs
    GO
    DECLARE authors_cursor CURSOR FOR
    SELECT au_lname FROM authors
    WHERE au_lname LIKE "B%"
    ORDER BY au_lnameOPEN authors_cursor-- Perform the first fetch.
    FETCH NEXT FROM authors_cursor-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
    WHILE @@FETCH_STATUS = 0
    BEGIN
       -- This is executed as long as the previous fetch succeeds.
       FETCH NEXT FROM authors_cursor
    ENDCLOSE authors_cursor
    DEALLOCATE authors_cursor
    GOau_lname                                 
    ---------------------------------------- 
    Bennet                                   
    au_lname                                 
    ---------------------------------------- 
    Blotchet-Halls                           
    au_lname                                 
    ----------------------------------------B. 使用 FETCH 将值存入变量
    下例与上例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回给客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。USE pubs
    GO-- Declare the variables to store the values returned by FETCH.
    DECLARE @au_lname varchar(40), @au_fname varchar(20)
    DECLARE authors_cursor CURSOR FOR
    SELECT au_lname, au_fname FROM authors
    WHERE au_lname LIKE "B%"
    ORDER BY au_lname, au_fnameOPEN authors_cursor-- Perform the first fetch and store the values in variables.
    -- Note: The variables are in the same order as the columns
    -- in the SELECT statement. FETCH NEXT FROM authors_cursor
    INTO @au_lname, @au_fname-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
    WHILE @@FETCH_STATUS = 0
    BEGIN   -- Concatenate and display the current values in the variables.
       PRINT "Author: " + @au_fname + " " +  @au_lname   -- This is executed as long as the previous fetch succeeds.
       FETCH NEXT FROM authors_cursor
       INTO @au_lname, @au_fname
    ENDCLOSE authors_cursor
    DEALLOCATE authors_cursor
    GOAuthor: Abraham Bennet
    Author: Reginald Blotchet-HallsC. 声明 SCROLL 游标并使用其它 FETCH 选项
    下例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持所有滚动能力。USE pubs
    GO-- Execute the SELECT statement alone to show the 
    -- full result set that is used by the cursor.
    SELECT au_lname, au_fname FROM authors
    ORDER BY au_lname, au_fname-- Declare the cursor.
    DECLARE authors_cursor SCROLL CURSOR FOR
    SELECT au_lname, au_fname FROM authors
    ORDER BY au_lname, au_fnameOPEN authors_cursor-- Fetch the last row in the cursor.
    FETCH LAST FROM authors_cursor-- Fetch the row immediately prior to the current row in the cursor.
    FETCH PRIOR FROM authors_cursor-- Fetch the second row in the cursor.
    FETCH ABSOLUTE 2 FROM authors_cursor-- Fetch the row that is three rows after the current row.
    FETCH RELATIVE 3 FROM authors_cursor-- Fetch the row that is two rows prior to the current row.
    FETCH RELATIVE -2 FROM authors_cursorCLOSE authors_cursor
    DEALLOCATE authors_cursor
    GOau_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    Bennet                                   Abraham              
    Blotchet-Halls                           Reginald             
    Carson                                   Cheryl               
    DeFrance                                 Michel               
    del Castillo                             Innes                
    Dull                                     Ann                  
    Green                                    Marjorie             
    Greene                                   Morningstar          
    Gringlesby                               Burt                 
    Hunter                                   Sheryl               
    Karsen                                   Livia                
    Locksley                                 Charlene             
    MacFeather                               Stearns              
    McBadden                                 Heather              
    O'Leary                                  Michael              
    Panteley                                 Sylvia               
    Ringer                                   Albert               
    Ringer                                   Anne                 
    Smith                                    Meander              
    Straight                                 Dean                 
    Stringer                                 Dirk                 
    White                                    Johnson              
    Yokomoto                                 Akiko                au_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    Yokomoto                                 Akiko                
    au_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    White                                    Johnson              
    au_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    Blotchet-Halls                           Reginald             
    au_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    del Castillo                             Innes                
    au_lname                                 au_fname             
    ---------------------------------------- -------------------- 
    Carson                                   Cheryl
      

  6.   

    @@FETCH_STATUS
    返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。返回值 描述 
    0 FETCH 语句成功。 
    -1 FETCH 语句失败或此行不在结果集中。 
    -2 被提取的行不存在。 
      

  7.   

    create  procedure update_follow
    asDeclare @personid as varchar(50)Declare personid_cursor2 cursor for select personid from f_person
     
    open personid_cursor2fetch next from personid_cursor2 into @personidwhile @@fetch_status=0
    begin
           declare @name varchar(50)
           select @name=name from f_person where personid=@personid  
           
           update f_follow set personid=@name where personid=@personid       fetch next from  personid_cursor2 into @personid
    endclose personid_cursor2
    GO