Получить значение переменной динамически в SQL Server SP - PullRequest
1 голос
/ 09 июня 2009

Есть ли способ получить значение локальной переменной, заданной ее именем, динамически в SQL Server SP?

declare @foo int
declare @bar int

declare @variable_name varchar(10)
set @variable_name = '@foo'

print -- magic happens here - how to print the value of the variable 
      -- which name is stored in @variable_name, in this case @foo

eval не поможет, так как у него нет доступа к локальным переменным окружения.

Я делаю это в основном для отладки / диагностики.

Ответы [ 3 ]

3 голосов
/ 09 июня 2009

Технически это возможно путем передачи всех локальных переменных в sp_executesql:

declare @foo int
declare @bar int

declare @variable_name varchar(10)
set @variable_name = '@foo'
set @foo = 1;
set @bar = 2;

declare @sql nvarchar(max);
set @sql = N'SELECT ' + @variable_name;
exec sp_executesql @sql, N'@foo int, @bar int', @foo, @bar

Конечно, это было бы довольно сложно поддерживать в реальной жизни, вызов sp_executesql должен постоянно обновляться с помощью локальных переменных в текущем кадре (пакет или вызов процедуры). Хотя это несколько «универсально», вряд ли это лучше, чем использование большого CASE со всеми именами локальных переменных.

0 голосов
/ 09 июня 2009

AFAIK, нет: прямой способ сделать это на SQL Server отсутствует.

0 голосов
/ 09 июня 2009
declare @foo int
declare @bar int

select @foo=1, @bar=2

declare @variable_name varchar(10)
set @variable_name = '@foo'

if @variable_name = '@foo'
    print @foo
else if @variable_name = '@bar'
    print @bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...