日期:2014-05-17  浏览次数:20670 次

[sqlserver]如何在while循环语句中实现对游标的fetch后赋值给相应变量
希望在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.这样还不如不加.你可以用一个表来存储啊。或者直接就在选出的集合加一个行号就可以表示了

SQL code


--加行号
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