не работает quotename внутри exec - PullRequest
3 голосов
/ 11 августа 2011

Я пытаюсь сделать что-то похожее на этот вопрос . Ответ рекомендует использовать quotename внутри exec.

Аналогично этому:

declare @var nvarchar(128)
set @var = 'hello world'
exec('print ''' + quotename(@var) + '''')

Но это не работает (неправильный синтаксис рядом с 'quotename'). Ответ неверен?

Я знаю, что сначала могу сгенерировать строку, поместить ее в переменную, а затем использовать ее с exec sp_executeSql, но я бы предпочел сделать это так, как в вопросе, может ли она работать ...

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Из Transact-SQL Reference :

Execute a character string
{ EXEC | EXECUTE } 
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } ='name' ]
[;]

Спецификация синтаксиса допускает только строковые переменные и строковые литералы в этой ситуации. Не имеет смысла, но вызов функций, возвращающих строки, здесь не разрешен.

2 голосов
/ 11 августа 2011

Лучшее решение, которое я мог бы предложить для вас, это предварительно указать значение:

declare @var nvarchar(128);
set @var = 'hello world';
declare @quoted varchar(100);
select @quoted =  quotename(@var);
exec('print ''' + @quoted + '''');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...