while 循环内的 T-SQL 动态 sql

T-SQL dynamic sql within while loop

我想使用 T-SQL while 循环在每个循环中分别获得 var_1、var_2、var_3。但是,它 returns 错误消息 "Must declare the scalar variable "@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 

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

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