2011-08-11 41 views
3

我正在嘗試做類似於this question的操作。答案建議在exec中使用quotename。不會在exec內部工作嗎?

與此類似:

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

但這不起作用(附近有語法錯誤QUOTENAME')。答案錯了嗎?

我知道我可以首先生成的字符串,把它放在一個變量,然後用exec sp_executeSql使用它,但我寧願做它的方式的問題,如果它可以工作...

回答

2

最好的解決方案我可以拿出你的是預報價值:

declare @var nvarchar(128); 
set @var = 'hello world'; 
declare @quoted varchar(100); 
select @quoted = quotename(@var); 
exec('print ''' + @quoted + ''''); 
2

Transact-SQL Reference

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

語法規範只允許字符串變量的d字符串文字在這種情況下。沒有意義,但調用函數返回字符串不允許在這裏。