2010-07-29 38 views
11

我遇到的问题是执行单引号的存储过程中的SQL语句。这是我正在执行的存储过程的查询。在SQL的Exec语句中使用单引号

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

我试图更新表“MYTABLE”列“myCOLUMN”与价值“O'John李四”

的实际查询是这样的,我试图把它简化一点在上面例如

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

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

任何机构可以帮助我格式化这个查询吗?

回答

17

用途:

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

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

+0

给出“错误的语法附近”)'。“错误。 – Mithil 2010-07-29 15:49:50

+0

@Mithil Deshmukh:对不起,忘记了最后一个“)” - 更正后,适用于SQL Server 2008 Express。 – 2010-07-29 16:06:05

+0

非常感谢OMG Poines,他们做到了。 – Mithil 2010-07-29 18:57:50

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

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

您需要双击逃脱单引号引用的字符串中 - 因此使用两个单引号包住字符串和四个(即,两个转义引号)将被取消逃进了一对单报价时,查询分析,然后未逃过再次成单引号,你居然要插入:

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

谢谢,迪伦,这很有帮助。 – Mithil 2010-07-29 18:58:18

2

尽管OMG Ponies的回答非常完美,并且对我也有帮助,但对我而言并不明显的事情是如何工作。 以下是我的理解,并可能帮助OP或任何其他人仍在寻找适用于任何情况。

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

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

所有已做的是,as OMG Ponies said,包装用单引号整个语句()。 然后,对于已经存在(')的每一个单引号,再放置一个引号(')。 我无法大胆的在第二条语句中添加的单引号,使其清晰可见。