当前位置: 代码迷 >> Sql Server >> [sqlserver]怎么在while循环语句中实现对游标的fetch后赋值给相应变量
  详细解决方案

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

热度:69   发布时间:2016-04-27 10:48:23.0
[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 @[email protected]+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 forselect sevencode from #promprodopen mycursorfetch from mycursor into @date1declare @i intdeclare @sql nvarchar(4000)set @i=1while (@@FETCH_STATUS=0)begin set @[email protected]+1 fetch next from mycursor into @d; insert into #t select @i,@d; set @d='';endclose mycursor;deallocate mycursor;select * from #t;drop table #t,#promprod
  相关解决方案