Использование одиночной кавычки в выражении 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''')