Показать сообщение отдельно
Старый 17.02.2011, 14:25   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Можно обойтись без профайлера SQL, ограничившись штатной трассировкой запросов, если в запросе использовать hint forceliterals. Хотя в запросе с литералами и без них может получиться разное значение маски
Да, хинт forceliterals спасает положение. Но только если использовать переменные

X++:
  while select forceLiterals TableTestLike
    where
        TableTestLike.Field1 like mask
    {
        info(TableTestLike.Field1);
    }
Если же вместо переменной использовать константу. Т.е. писать запрос так

X++:
  while select forceLiterals TableTestLike
    where
        TableTestLike.Field1 like '*ABC0123456'
    {
        info(TableTestLike.Field1);
    }
То вне зависимости от использования хинта forceliterals или forceplaceholders на сервер уходит запрос вида

Код:
SELECT *
FROM TableTestLike
WHERE (Field1 like '\%ABC0123456' ESCAPE '\' )
Подобный запрос вообще ничего не возвращает. Но здесь проблема в обратном слеше и действительно уже в собственно MS SQL. Очевидно, происходит не корректное исключение этого самого слеша из условия отбора