【问题标题】:doesn't quotename work inside of exec?quotename 在 exec 内部不起作用吗?
【发布时间】:2011-10-25 03:58:18
【问题描述】:

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

与此类似:

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

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

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

【问题讨论】:

    标签: sql-server-2005 tsql


    【解决方案1】:

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

    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' ]
      [;]
      

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

      【讨论】:

        猜你喜欢
        • 2013-09-11
        • 2017-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        相关资源
        最近更新 更多