请教在存储过程中如何使用动态变量
如:先定义了
@d1 varchar(30),
@d2 varchar(30),
@d3 varchar(30),
@d4 varchar(30),
@d5 varchar(30),
@d6 varchar(30),
@d7 varchar(30),
@d8 varchar(30),
@d9 varchar(30),
@d10 varchar(30),
@i int(4)然后循环i=1,i<=10;
在循环体内如何得到与i相对应的变量,如:当i=1时,取得@d1变量,当i=2时,取得@d2变量?
想要循环体内判断当前的di不为空时再进行操作

解决方案 »

  1.   


    select 
    [00]=(case when i=1 then @d1 else 0 end),
    [11]=(case when i=2 then @d2 else 0 end),
    [22]=(case when i=3 then @d3 else 0 end),
      .
      .
      .
    [99]=(case when i=9 then @d9 else 0 end),
    [10](case when i=10 then @d10 else 0 end)
      

  2.   

    用特殊字符分割,拼成一个参数传入procedure,然后做处理
    declare @d varchar(300)
    set @d = 'a|b|c'--传入参数declare @t varchar(30)
    declare @d1 varchar(301)
    set @d1 = @d+'|'
    while PatIndex('%|%',@d1)<>0
    begin
        set @t = SubString(@d1,0,PatIndex('%|%',@d1))
        print @t
        set @d1 = SubString(@d1,PatIndex('%|%',@d1)+1,len(@d1))
    end/*输出
    a
    b
    c
    */
      

  3.   

    declare @d1 nvarchar(30)
    declare @d2 nvarchar(30)
    declare @d3 nvarchar(30)
    declare @d4 nvarchar(30)
    declare @d5 nvarchar(30)declare @str nvarchar(max)
    set @str=''
    declare @i int
    set @i=1
    while(@i<=5)
    begin
    set @str=@str+' set @d'+convert(varchar(5),@i)+'=convert(nvarchar(10),'+convert(varchar(5),@i)+') print @d'+convert(varchar(5),@i)
    set @i=@i+1
    end
    exec SP_EXECUTESQL
    @str,
    N'@d1 as int OUTPUT,@d2 as int OUTPUT,@d3 as int OUTPUT,@d4 as int OUTPUT,@d5 as int OUTPUT',
    @d1 OUTPUT ,
    @d2 OUTPUT,
    @d3 OUTPUT,
    @d4 OUTPUT,
    @d5 OUTPUTOUTPUT
    1
    2
    3
    4
    5
    你这里也一样,需要动态拼SQL
      

  4.   


    declare @str nvarchar(max) 这句未通过,换成declare @str nvarchar(500)测试通过谢谢了,一直没拼对。 
      

  5.   

    nvarchar(max) 是SQL2005以后的。