从名称(字符串)组合中获取变量值

时间:2014-07-29 03:24:02

标签: sql-server tsql stored-procedures

我在谷歌搜索了几个小时,它返回了很多结果,但不是我想实现的。

我使用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可能是123345678@Answer部分需要从@Q + @i1获取值,而不是@Q123


我想要实现此结果的原因是因为存储过程接收输入@Q1, @Q2, @Q3, ...,然后逐个地通过这些@Q1, @Q2, @Q3, ...变量将新记录插入到表中。

我知道如何使用循环插入,但我不知道如何获得动态变量?否则,我必须写多次插入查询。

2 个答案:

答案 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);