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

时间:2010-07-29 15:31:47

标签: sql sql-server tsql

我遇到从具有单引号的存储过程执行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”。希望更有意义。

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

4 个答案:

答案 0 :(得分:21)

使用:

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:2)

尽管OMG小马的回答非常完美并且对我有所帮助,但对我来说并不是很明显的事情是如何起作用的。 以下是我的理解,并可能帮助OP或任何仍在寻找的人适用于任何情况。

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

转化  select (' sp_change_users_login ''update_one '', ''LName '' ,''Uname '' ')

所有已完成的工作是as OMG Ponies said,将整个语句用单引号(')包装。 然后,对于已经存在的每个单引号('),在它之前再放一个(')。 我无法加粗在第二个语句中添加的单引号,以使其清晰可见。

答案 3 :(得分:1)

 UPDATE myTABLE SET myCOLUMN='O''John Doe'

 EXEC('UPDATE myTABLE SET myCOLUMN=''O''John Doe''')