为了账号安全,请及时绑定邮箱和手机立即绑定

我的问题到底在哪,我这样也不行,好像我注释到的循环跟本没作用?

我的问题到底在哪,我这样也不行,好像我注释到的循环跟本没作用?

弑天下 2022-09-17 15:11:26

--关键字用[]
select * from [User]

use SHMSDB
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

为什么只能查询到第一条数据,
而for select [username] from [user],
while @@fetch_status=0 and @i>1
begin
fetch next from usercursor set @i=@i-1
end
这样能循环出每一条数据,?
补充问题:
Fetch usercursor into @name
怎么你的这里不要 Fetch next from。。。,我以前没用过游标,谢谢你详解。
还有:
use SHMSDB

declare @i int
declare @index int
declare @name varchar(100)
declare @strName varchar(8000)
select @index=0
declare usercursor cursor

for select [username] from [user]
open usercursor
select @i=count(*) from [user]
--读取下一行数据把读取的数据放在变量中
fetch next from usercursor
--是系统关键字代表游标取值的状态等于0表示取到了一行数据 否则表示最后一行数据读完了!
--while @@fetch_status=0 and @index<@i
--begin
-- fetch next from usercursor into @name
--set @strName=@strName+','
--set @strName=@strName+@name
-- set @i=@i-1
--print cast(@i as varchar)+','+@strName+','+'字符串'
--end
close usercursor
--删除游标引用
deallocate usercursor

查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1510条经验 获得超5个赞

你的游标每一条数据都查询到了。
读取到第一条数据你把name赋值给@name,
读取到第二条数据,把name赋值给@name,所以@name永远只有一个值。
而且你这句select @name=UserName from [user]
也是如此,其实都查询到了,但是@name,只会保留最后一行数据的username

查看完整回答
反对 回复 2022-09-21
?
慕的地10843

TA贡献1493条经验 获得超8个赞

你这个 游标 有问题。修改如下:
select * from [User]

use SHMSDB
declare @i int
declare @name varchar(100)
declare @name_str varchar(8000)

select @i = 0, @name = '', @name_str = ''
declare usercursor cursor
for select [username] from [user]
open usercursor
while @@fetch_status = 0 and @i < 100 -- 最大循环100次
begin
--读取下一行数据把读取的数据放在变量中
Fetch usercursor into @name
if @name_str <> ''
set @name_str = @name_str +','
set @name_str = @name_str + @name
set @i = @i + 1
end
close usercursor
deallocate usercursor

print '你游标循环了'+cast(@i as varchar)+'次,用户名字符串为:'+@name_str


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信