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
我想使用 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