Использование одиночной кавычки в выражении Exec в SQL

У меня возникают проблемы с выполнением инструкции SQL из хранимого процесса с одинарными кавычками. Вот мой запрос из хранимой процедуры, которую я выполняю.

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

Я пытаюсь обновить столбец "myTABLE" таблицы "myCOLUMN" со значением "O'John Doe"

Фактический запрос похож на этот, я попытался немного упростить его в приведенном выше примере

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

Значение @IntegrationGuardian2FullName - "OSINGLEQUOTEJOHN DOE". Надеюсь, что это имеет смысл.

Может ли любой орган помочь мне форматировать этот запрос?

Ответ 1

Использование:

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

То, что вы предоставили, потребовало двух одинарных кавычек вокруг строки, а также для замены и дополнительных одинарных кавычек из-за одиночной кавычки, необходимой для динамического SQL.

Ответ 2

Вам нужно удвоить одиночную кавычку внутри строки с кавычками, поэтому используйте две одинарные кавычки для обертывания строки и четыре (т.е. две экранированные кавычки), которые не будут сбрасываться в пару одинарных кавычек, когда запрос анализируется, а затем снова не сбрасывается в одну цитату, которую вы действительно хотите вставить:

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

Ответ 3

В то время как ответ OMG Ponies был идеальным и помог мне, то, что не сразу стало очевидным для меня, это то, как это работает. Вот как я понял и могу помочь OP или кому-либо еще еще искать, примениться к любой ситуации.

Используя простой пример sp_change_users_login 'update_one', 'LName','Uname'

Преобразованный  select (' sp_change_users_login ''update_one '', ''LName '' ,''Uname '' ')

Все, что было сделано, как сказал OMG Ponies, завершает весь оператор в одинарных кавычках ('). Затем, для каждой отдельной цитаты, которая уже присутствует ('), поставьте еще один, чтобы предшествовать ей ('). Я не могу выделить живые одинарные кавычки, которые были добавлены во втором выражении, чтобы сделать его хорошо видимым.

Ответ 4

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

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