Я использую SQL Server 2014 и столкнулся со следующей проблемой в предложении WHERE моего запроса T-SQL.
В моем предложении WHERE будут перечислены названия городов. Однако некоторые имена содержат такие символы, как апостроф. Пример: СЕН-ЖУЛЬЕН Д'ОТМАН
Мой T-SQL выглядит следующим образом:
SELECT
...
FROM [TownList]
WHERE [townName] IN
(
...,
...,
'ST JULIEN D'HOTMAN',
...,
)
Вышеприведенное не работает, потому что один или несколько из [townName] содержат апостроф.
Из решения, данного здесь (Как вставить значение, содержащее апостроф (одинарную кавычку)?, мне нужно переписать это значение как «ST JULIEN D''HOTMAN'
Это нормально, если у вас есть несколько имен, которые следуют этому принципу. Вы можете вручную исправить способ записи значений. Тем не менее, более 200-300 имен в моем списке имеют эти проблемы.
Есть ли альтернативное решение этой проблемы?
Я бы использовал таблицу или временную таблицу для переноса ваших данных перед фильтрацией данных.
если вы не хотите изменять каждый [townName]
, вы можете попробовать SET QUOTED_IDENTIFIER OFF
, а затем использовать двойные кавычки для строки «Идентифицировать».
Causes SQL Server to follow the ISO rules regarding quotation mark delimiting identifiers and literal strings. Identifiers delimited by double quotation marks can be either Transact-SQL reserved keywords or can contain characters not generally allowed by the Transact-SQL syntax rules for identifiers.
SET QUOTED_IDENTIFIER OFF;
SELECT
...
FROM [TownList]
WHERE [townName] IN
(
...,
...,
"ST JULIEN D'HOTMAN",
...,
)
SET QUOTED_IDENTIFIER ON;
Почему не мочь вы экранируете символы? Это является решение.