有二十几个变量,想在循环中分别以用变量名来调用其数值,如何使@M1+1来调用M2呢?
DECLARE @M1 NUMERIC,@M2 NUMERIC @M3 NUMERIC....
SET @M1=30000
SET @M2=50000
SET @M3=8000
SET @M4=2000
SET ....
SET @M20=3000
SET @J=1000
WHILE @J<@M1
BEGIN
INSERT SSS SELECT * FROM BBB

解决方案 »

  1.   

    对不起,没太说明白,我有二十个变量分别是从@M1到@M20循环中每一个变量的值用一次,我就不知道调用变量名,如何用变量名@m1+1到调用出@m2就这意思
      

  2.   


    declare @sql varchar(500) 
    declare @j int
    set @j=0
    while @j<20
       begin
       set @sql = ' declare @T'+ convert(varchar(5),@j)+' varchar(10)   set @T'+ convert(varchar(5),@j)+ ' = ------“想要赋的值”
    exec(@sql)
        set @j=@j+1
        end可以循环声明、使用变量,但是有一个限制就是:此变量不能在外部使用,想要使用此变量只能在@sql里用exec(@sql)使用
      

  3.   

    declare @sql varchar(500) 
    declare @j int
    set @j=0
    while @j<20
       begin
       set @sql = ' declare @T'+ convert(varchar(5),@j)+' varchar(10)   set @T'+ convert(varchar(5),@j)+ ' =' ------“想要赋的值”
    exec(@sql)
        set @j=@j+1
        end
      

  4.   

    把变量组成一个字符串输入就行.例子:
    create procedure #IntListToTable
    @cslist varchar(8000),
    @tablename Sysname
    AS
    Begin
    Declare @spot smallint, @str varchar(8000), @sql varchar(8000)
    while @cslist <> ''
    Begin
    Set @spot = charindex(',', @cslist)
    if @spot > 0
    Begin
    Set @str = cast(left(@cslist, @spot-1) as int)
    set @cslist = right(@cslist, len(@cslist)-@spot)
    end
    else
    Begin
    Set @str = cast(@cslist as int)
    Set @cslist = ''
    End
    Set @sql = 'Insert Into ' + @tablename + ' Values('+convert(varchar(100),@str)+')'
    exec(@sql)
    end
    endcreate table #vals (id INT)exec #IntListToTable '30000,50000,8000,2000,3000', '#vals'select id from #vals结果:30000
    50000
    8000
    2000
    3000
      

  5.   

    哪位老大告诉我怎么直接贴SQL代码?