在SQL中的Exec语句中使用单引号

Mit*_*hil 16 sql t-sql sql-server

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

EXEC('UPDATE myTABLE 
         SET myCOLUMN = (SELECT Replace('OSINGLEQUOTEJOHN DOE','SINGLEQUOTE','''')')
Run Code Online (Sandbox Code Playgroud)

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

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

EXEC('UPDATE myTABLE 
         SET myCOLUMN = (SELECT Replace('+ @IntegrationGuardian2FullName +','SINGLEQUOTE','''')')
Run Code Online (Sandbox Code Playgroud)

价值@IntegrationGuardian2FullName是"OSINGLEQUOTEJOHN DOE".希望更有意义.

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

OMG*_*ies 21

使用:

EXEC('UPDATE myTABLE 
        SET myCOLUMN = (SELECT REPLACE(''OSINGLEQUOTEJOHN DOE'',
                                       ''SINGLEQUOTE'',
                                       ''''''''))')
Run Code Online (Sandbox Code Playgroud)

您提供的内容需要两个单引号围绕字符串,以及要替换的内容以及其他单引号,因为动态SQL需要单引号转义.


Dyl*_*tie 9

你需要在引用的字符串中双重转义单引号 - 所以使用两个单引号来包装字符串,以及四个(即两个转义引号),当解析查询时,它们将被转义为一对单引号,然后再次转义为您实际要插入的单引号:

EXEC('UPDATE myTable SET myColumn = ''John''''O Doe''')
Run Code Online (Sandbox Code Playgroud)