t-sql从带有变量名的字符串中获取变量值

时间:2010-03-02 13:35:17

标签: tsql

有没有办法将@my_variable字符串转换为值@my_variable

我有一个存储变量名称的表。我需要获取此变量的值。像这样:

DECLARE @second_variable AS NVARCHAR(20);
DECLARE @first_variable AS NVARCHAR(20);
SET @first_variable = '20';
SET @second_variable = SELECT '@first_variable'; --here I want that @second variable be assigned a value of "20".

3 个答案:

答案 0 :(得分:1)

解决问题的最有效方法是解决/更改/修复需要have a table which stores names of variables的原因的设计。

答案 1 :(得分:1)

您可以使用sp_executesql来执行字符串(因此您可以执行sp_executesql 'SET @second_variable = ' + @name_of_variable;之类的操作)。但是,将这一个语句放入sp_executesql将不起作用,因为strings executed with sp_executesql or EXECUTE have their own variable scope,因此,@ second_variable和@first_variable都不可访问。

因此,您可以做的是将完整代码(不包括变量名称)移动到sp_executesql语句中(未经测试):

DECLARE @name_of_variable NVARCHAR(MAX)
SET @name_of_variable = ...

EXECUTE sp_executesql N'...lots of code... ' + @name_of_variable + ' ...lots of code...'

答案 2 :(得分:0)

尝试sp_executesql

declare @f nvarchar(20)
declare @s nvarchar(20)
declare @sT nvarchar(100)

set @f = '20'
set @sT = 'set @s = ''' + @f + ''''

exec sp_executesql @sT, N'@s nvarchar(20) output', @s output

print @s