TSQL: переменная область и EXEC () - PullRequest
1 голос
/ 24 марта 2009
declare @test varchar(20)
set @test = 'VALUE'

exec('
select '+@test+'
')

Возвращает:

Неверное имя столбца 'VALUE'.

Есть ли альтернативный метод для отображения значения переменной в операторе выбора?

Ответы [ 3 ]

8 голосов
/ 24 марта 2009

Чистой альтернативой является использование sp_executesql () и его способность работать с параметризованными операторами:

DECLARE @test VARCHAR(20)
DECLARE @stmt NVARCHAR(100)
DECLARE @parm NVARCHAR(100)

SET @stmt = N'SELECT @val'        /* statement definition */
SET @parm = N'@val VARCHAR(20)'   /* parameters definition */
SET @test = 'VALUE'

EXECUTE sp_executesql @stmt, @parm, @val = @test

Урожайность:

(no column name)
VALUE
3 голосов
/ 24 марта 2009

cmsjr имеет точку зрения о том, что для этого не требуется exec. Но при условии, что вы публикуете упрощенную версию проблемы, и exec является требованием:

Там нет столбца с именем "значение", потому что нет таблицы. Если вы просто хотите, чтобы он печатал value, вам нужно заключить его в кавычки, чтобы он выглядел как строковый литерал внутри вызова exec:

exec(' select ''' + @test + ''' ')
3 голосов
/ 24 марта 2009

Вам не нужно использовать Exec в этом контексте Если вы делаете прямое задание, вы можете использовать

Set @test = 'VALUE'

и для отображения значения просто выберите его, не назначая значение

Select @test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...