DECLARE row  CURSOR
FOR( SELECT  * FROM test   )OPEN rowFETCH NEXT FROM row
WHILE (@@FETCH_STATUS = 0 )
BEGIN FETCH NEXT FROM row
END
CLOSE row
DEALLOCATE row
为什么多读取一个空行?

解决方案 »

  1.   

    DECLARE row  CURSOR
    FOR(    SELECT  * FROM test   )OPEN rowFETCH NEXT FROM row
    WHILE (@@FETCH_STATUS = 0 )
    BEGIN在这个地方操作你的语句,怎么会多一个空行呢
        FETCH NEXT FROM row
    END
    CLOSE row
    DEALLOCATE row
      

  2.   

    FETCH NEXT FROM row的原因
      

  3.   

    -- 定义游标
    DECLARE row  CURSOR
    FOR(    SELECT  * FROM test   )
    -- 打开游标
    OPEN row
    -- 从游标中去出一条数据
    FETCH NEXT FROM row
    -- 游标取到数据时进行循环
    WHILE (@@FETCH_STATUS = 0 )
    BEGIN
        -- 事务处理
        ....
        -- 从游标中去出一条数据
        FETCH NEXT FROM row
    END
    -- 关闭游标
    CLOSE row
    -- 释放游标
    DEALLOCATE row
      

  4.   

    你的前一次 fetch 读取到数据,使 @@FETCH_STATUS = 0,并不意味着你下一次再读的时候能读到数据,最后读不到数据时才退出循环,当然会出现一个空行了.
      

  5.   

    DECLARE row  CURSOR
    FOR(    SELECT  * FROM test   )OPEN rowFETCH  FROM row
    WHILE (@@FETCH_STATUS = 0 )
    BEGIN    FETCH NEXT FROM row
    END
    CLOSE row
    DEALLOCATE row