[sqlserver]如何在while循环语句中实现对游标的fetch后赋值给相应变量
@@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