t-sql получить значение переменной из строки с именем переменной - PullRequest
5 голосов
/ 02 марта 2010

Есть ли способ преобразовать @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 ]

1 голос
/ 02 марта 2010

Вы можете использовать sp_executesql для выполнения строк (чтобы вы могли сделать что-то вроде sp_executesql 'SET @second_variable = ' + @name_of_variable;). Однако простое помещение этого одного оператора в sp_executesql не сработает, поскольку строки , выполняемые с sp_executesql или EXECUTE, имеют собственную переменную 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...'
1 голос
/ 02 марта 2010

Наиболее вероятное решение вашей проблемы - обратиться / изменить / исправить дизайн, который требует, почему вы бы have a table which stores names of variables.

0 голосов
/ 02 марта 2010

попробуй 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...