Tsql t-sql从变量名为的字符串中获取变量值

Tsql t-sql从变量名为的字符串中获取变量值,tsql,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

有没有办法将
@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".

解决问题的最有可能的方法是解决/更改/修复设计,该设计需要一个存储变量名称的表。

试试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

您可以使用
sp_executesql
来执行字符串(因此您可以执行类似
sp_executesql'SET@second_variable='+@name_of_variable;
)。然而,仅仅将这一条语句放入sp_executesql是行不通的,因为@second_变量和@first_变量都不可访问

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


我认为这不是马库斯想要的:他想要将
'@f'
(注意引号)转换为20,字符串
'@f'
来自一个表。在您的示例中,显式使用
@f
,即它在编译时绑定。
DECLARE @name_of_variable NVARCHAR(MAX)
SET @name_of_variable = ...

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