我在谷歌搜索了几个小时,它返回了很多结果,但不是我想实现的。
我使用t-sql存储过程的代码
代码就像那样
DECLARE @Answer varchar(50), @i1 varchar(5), @Q123 varchar(5)
set @i1= '123'
set @Q123 = '9'
Set @Answer = '@Q' + @i1
print @Answer
我想打印@Answer = 9
,但代码的结果是@Q123
我如何获得@ Q123的价值?
我想动态检索@Q + @i1
,@i1
可能是123
,345
或678
。 @Answer
部分需要从@Q + @i1
获取值,而不是@Q123
。
我想要实现此结果的原因是因为存储过程接收输入@Q1, @Q2, @Q3, ...
,然后逐个地通过这些@Q1, @Q2, @Q3, ...
变量将新记录插入到表中。
我知道如何使用循环插入,但我不知道如何获得动态变量?否则,我必须写多次插入查询。
答案 0 :(得分:2)
请退一步说明你真正要做的事情。你要求的是没有意义的。为了动态检索变量,首先需要DECLARE
。为什么变量名必须是动态的?这毫无意义。
换句话说,为什么这段代码不能按你想要的方式运作?
DECLARE @Answer varchar(50), @i1 varchar(5), @Q varchar(5)
set @i1= '123'
set @Q = '9'
Set @Answer = @Q
print @Answer
代码只知道一个变量,为什么你必须动态命名它?我可以建议你使用@i1
在表格中查找一行并从那里得到答案。
答案 1 :(得分:1)
应如下所示,从''
中移除@Q
单引号。由于引用@Answer
已设置为@Q
+ value of @i1
= @Q123
Set @Answer = @Q + @i1;
print @Answer;
我想打印@Answer = 9
然后只需将@Q123
分配给@Answer
,如下所示
DECLARE @Answer varchar(50), @Q123 varchar(5);
set @Q123 = '9';
Set @Answer = @Q123;
print @Answer;
编辑: 不确定为什么要这样做,但这可以使用动态查询来完成。像下面的东西
DECLARE @i1 varchar(5);
declare @sql varchar(200);
set @i1= '123';
set @sql = 'DECLARE @Answer varchar(50), @Q123 varchar(5);
set @Q123 = ''9'';
Set @Answer = @Q'+ @i1 + '; print @Answer;';
--print @sql;
exec(@sql);