【问题标题】:Using single quote in an Exec statement in SQL在 SQL 的 Exec 语句中使用单引号
【发布时间】:2010-07-29 15:31:47
【问题描述】:

我在从具有单引号的存储过程中执行 SQL 语句时遇到问题。这是我正在执行的存储过程中的查询。

EXEC('UPDATE myTABLE 
         SET myCOLUMN = (SELECT Replace('OSINGLEQUOTEJOHN DOE','SINGLEQUOTE','''')')

我正在尝试使用值“O'John Doe”更新表“myTABLE”列“myCOLUMN”

实际的查询是这样的,我在上面的例子中试着简化了一点

EXEC('UPDATE myTABLE 
         SET myCOLUMN = (SELECT Replace('+ @IntegrationGuardian2FullName +','SINGLEQUOTE','''')')

@IntegrationGuardian2FullName 的值是“OSINGLEQUOTEJOHN DOE”。希望这更有意义。

任何人都可以帮我格式化这个查询吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    用途:

    EXEC('UPDATE myTABLE 
            SET myCOLUMN = (SELECT REPLACE(''OSINGLEQUOTEJOHN DOE'',
                                           ''SINGLEQUOTE'',
                                           ''''''''))')
    

    您提供的内容需要字符串周围的两个单引号,以及要替换的内容,以及额外的单引号,因为动态 SQL 需要单引号转义。

    【讨论】:

    • @Mithil Deshmukh:抱歉,忘记了最后一个“)” - 已更正,适用于 SQL Server 2008 Express。
    【解决方案2】:

    您需要在带引号的字符串中对单引号进行双重转义 - 因此使用两个单引号来包裹字符串,四个(即两个转义的引号)在查询时将被取消转义为一对单引号被解析,然后 再次 转义到您实际要插入的单引号中:

    EXEC('UPDATE myTable SET myColumn = ''John''''O Doe''')
    

    【讨论】:

    • 谢谢,迪伦,这很有帮助。
    【解决方案3】:

    虽然 OMG Ponies 的回答很完美,也对我有所帮助,但对我来说并不是很明显的事情是它是如何工作的。 以下是我的理解,并且可以帮助 OP 或其他仍在寻找的人适用于任何情况。

    使用一个简单的例子 sp_change_users_login 'update_one', 'LName','Uname'

    变身 select (<em>'</em> sp_change_users_login <em>'</em>'update_one <em>'</em>', <em>'</em>'LName <em>'</em>' ,<em>'</em>'Uname <em>'</em>' <em>'</em>)

    所做的只是as OMG Ponies said 将整个语句用单引号(') 括起来。 然后,对于每个已经存在的单引号('),在它前面再放一个(')。 我无法将第二条语句中添加的单引号加粗,使其清晰可见。

    【讨论】:

      【解决方案4】:
       UPDATE myTABLE SET myCOLUMN='O''John Doe'
      
       EXEC('UPDATE myTABLE SET myCOLUMN=''O''John Doe''')
      

      【讨论】:

        猜你喜欢
        • 2015-12-31
        • 2012-06-28
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 2013-03-21
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多