2011-08-11 38 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字符串文字在这种情况下。没有意义,但调用函数返回字符串不允许在这里。