select * from [User]use DB
declare @i int
declare @name varchar
declare usercursor cursor 
for select [username] from [user]
open usercursor
select @i=count(*) from [user] 
select @name=UserName from [user]
--读取下一行数据把读取的数据放在变量中
 fetch next from usercursor 
--是系统关键字代表游标取值的状态等于0表示取到了一行数据 否则表示最后一行数据读完了!
while @@fetch_status=0 and @i>1
begin
 fetch next from usercursor into @name
 set @i=@i-1
end
close usercursor
--删除游标引用
deallocate usercursor请问:select * from [User]
我查询到有几条数据,为什么 fetch next from usercursor into @name
这段查询出却只有第一条数据,为啥循环没有数据?

解决方案 »

  1.   

    DECLARE @nametmp VARCHAR(10) ,
        @name VARCHAR(100)
    SET @name = '' ;
    DECLARE usercursor CURSOR  
    FOR SELECT [username] FROM UserInfo
    OPEN usercursor
    --读取下一行数据把读取的数据放在变量中
    FETCH NEXT FROM usercursor  INTO @nametmp
    --是系统关键字代表游标取值的状态等于0表示取到了一行数据 否则表示最后一行数据读完了!
    WHILE @@fetch_status = 0 
        BEGIN
            SET @name = @name + @nametmp
            FETCH NEXT  FROM usercursor INTO @nametmp         
        END
    CLOSE usercursor
    DEALLOCATE usercursor
    PRINT @name
    fetch next from usercursor into @name這個只能去當前的數據,下一次循環就把上一次的值沖掉了
      

  2.   

     fetch next from usercursor
    那请问 为什么我这种方式,可以全部查询到呢?
      

  3.   

    还有一点,fetch next from usercursor into @name这句话获取到的是第一条数据,为什么呢?
      

  4.   


    @name
    这是个标量,放单个值用的
      

  5.   


     哦,对,我写错了,for select * from [user]是这这样就可以