while循环中的T-SQL动态sql

时间:2018-04-26 22:46:12

标签: sql-server tsql while-loop dynamic-sql

我想使用T-SQL while循环在每个循环中单独获取var_1,var_2,var_3。但是,它返回错误消息"必须声明标量变量" @ var_1"," @ var_2"," @ var_3"。可以请帮帮我。谢谢。我在下面附上了我的代码:

declare @var_1 varchar(max)
set @var_1 = 'abcdef'
declare @var_2 varchar(max)
set @var_2 = 'ghijk'
declare @var_3 varchar(max)
set @var_3 = 'lmnopq'
declare @counter tinyint
set @counter = 1
declare @termName varchar(max)
while @counter<=3
begin

    set @termName = '@var_' + CONVERT(varchar(10), @counter)
    print @termName
    declare @sql_code varchar(max)
    set @sql_code = '
       print '+ @termName+';
    '
    print @sql_code
    exec (@sql_code)

    set @counter = @counter + 1
end 

1 个答案:

答案 0 :(得分:0)

当您对字符串使用EXEC时,该命令在新会话中执行,因此不能使用变量传递参数或获取结果。但是,您可以创建一个临时表,将参数放入其中并在动态语句中使用此表:

create table #T (val_1 varchar(10), val_2 varchar(10), val_3 varchar(10));
insert into #T values ('abcef', 'ghijk', 'lmnopq');
declare @counter tinyint
set @counter = 1
while @counter<=3
begin
    declare @sql_code varchar(max)
    set @sql_code = '
       declare @v varchar(10);
       select @v = val_' + CONVERT(varchar(10), @counter) + ' FROM #T;
       print @v;
    '
    print @sql_code
    exec (@sql_code)
    set @counter = @counter + 1
end