[sqlserver]如何在while循环语句中实现对游标的fetch后赋值给相应变量

发布时间 2023-05-25 20:42:20作者: dreamw

@@sqlserver 游标 当前列 赋值

 

希望在while时,实现对游标fetch后将取得的值赋给相应的变量。
如下面的程序,但是没有成功赋值。希望高手解决!!
如下:


create table #promprod (sevencode nvarchar(20))
insert into #promprod values ('0063173')
insert into #promprod values ('0057584')
insert into #promprod values ('0058495')
insert into #promprod values ('0058510')
insert into #promprod values ('0076541')
insert into #promprod values ('0097968')

declare @date1 varchar(10)
declare @date2 varchar(10)
declare @date3 varchar(10)
declare @date4 varchar(10)
declare @date5 varchar(10)
declare @date6 varchar(10)

declare mycursor cursor for
select sevencode from #promprod

open mycursor
fetch from mycursor into @date1

declare @i int
declare @sql varchar(7000)
set @i=1

while (@@FETCH_STATUS=0)
begin
set @i=@i+1
set @sql='fetch next from mycursor into @date'+cast(@i as varchar)
exec(@sql)
end

 

 

 

 

 

你这样不行的。 不可能直接执行 fetch 当成动太语句。它与游标是一个整体,你要全部加入动态sql.这样还不如不加.你可以用一个表来存储啊。或者直接就在选出的集合加一个行号就可以表示了

--加行号

select rn=row_number() over(order by getdate()) sevencode from #promprod

-- 存入表中

create table #promprod (sevencode nvarchar(20))

insert into #promprod values ('0063173')

insert into #promprod values ('0057584')

insert into #promprod values ('0058495')

insert into #promprod values ('0058510')

insert into #promprod values ('0076541')

insert into #promprod values ('0097968')

create table #t(id int,value nvarchar(20));



declare @date1 varchar(10)

declare @date2 varchar(10)

declare @date3 varchar(10)

declare @date4 varchar(10)

declare @date5 varchar(10)

declare @date6 varchar(10)



declare @d varchar(10)





declare mycursor cursor for

select sevencode from #promprod



open mycursor

fetch from mycursor into @date1



declare @i int

declare @sql nvarchar(4000)

set @i=1



while (@@FETCH_STATUS=0)

begin

 set @i=@i+1

 fetch next from mycursor into @d;

 insert into #t select @i,@d;

 set @d='';

end

close mycursor;

deallocate mycursor;



select * from #t;



drop table #t,#promprod