T-SQL динамический SQL внутри цикла while - PullRequest
0 голосов
/ 27 апреля 2018

Я хотел бы использовать T-SQL цикла, чтобы получить 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 голосов
/ 27 апреля 2018

Когда вы используете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...