没有引用exec内部的工作?

时间:2011-08-11 16:31:42

标签: sql-server-2005 tsql

我正在尝试做类似于this question的事情。答案建议在exec中使用引号。

与此类似:

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

但这不起作用('quotename'附近的语法不正确)。答案错了吗?

我知道我可以先生成字符串,将其放在变量中,然后将其与exec sp_executeSql一起使用,但我宁愿按照问题的方式进行,如果它可以工作......

2 个答案:

答案 0 :(得分:2)

我能为您提出的最佳解决方案是预先引用价值:

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

答案 1 :(得分:2)

来自Transact-SQL Reference

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

语法规范仅允许在这种情况下使用字符串变量和字符串文字。没有意义,但这里不允许调用返回字符串的函数。