Перейти к содержанию

Запрет использования выражений и полей таблиц в операторе ПОДОБНО

При использовании в тексте запроса оператора ПОДОБНО допустимо использовать только константные строковые литералы или параметры запроса. Запрещается формировать строку шаблона при помощи вычислений, использовать конкатенацию строк средствами языка запросов. Например:

Допустимо:

Реквизит ПОДОБНО "123%"

Недопустимо:

Реквизит ПОДОБНО "123" + "%" Реквизит ПОДОБНО Таблица.Шаблон

Запросы, в которых управляющие символы шаблона оператора ПОДОБНО находятся в полях запроса или в вычисляемых выражениях, по-разному интерпретируются на различных СУБД. Запрос, успешно выполняющийся, например, при работе с файловой базой, может возвращать неверные результаты при работе в режиме клиент-сервера. Подобные выражения необходимо переформулировать.

Вместо:

Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    Товары.Ссылка
    |ИЗ
    |    Справочник.Товары КАК Товары
    |ГДЕ
    |    Товары.СтранаПроисхождения.Наименование ПОДОБНО &ШаблонНазванияСтраны + "_"
    |");
Запрос.УстановитьПараметр("ШаблонНазванияСтраны", "ЧА");

Необходимо использовать:

Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    Товары.Ссылка
    |ИЗ
    |    Справочник.Товары КАК Товары
    |ГДЕ
    |    Товары.СтранаПроисхождения.Наименование ПОДОБНО &ШаблонНазванияСтраны
    |");
Запрос.УстановитьПараметр("ШаблонНазванияСтраны", "ЧА_");

Данное требование продиктовано необходимостью переносимости прикладных решений на различные СУБД.

См. также

Экранирование кода

// sonar:ExpressionInLikeOperator:off
// sonar:ExpressionInLikeOperator:on