Делает ли SQL like likes NVARCHAR(MAX)?
Кажется, нет...
Представьте себе такой стол:
FORUM_MESSAGES ( ID INT, COMMENT NVARCHAR(MAX) )
Теперь смотрите этот запрос:
DECLARE @LIKE AS NVARCHAR(MAX) = NULL SELECT * FROM FORUM_MESSAGES WHERE COMMENT LIKE ISNULL(@LIKE, COMMENT)
Если у вас есть комментарий длиной более 4000 букв, он будет отбрасывать ошибку усечения...
Глядя на план исполнения я обнаружил это небольшое изменение:
FORUM_MESSAGES.COMMENT like CONVERT_IMPLICIT(NVARCHAR(4000), ISNULL(@LIKE, FORUM_MESSAGES.COMMENT ), 0)
После некоторого копания стало очевидно, что оператор LIKE делает это с SQL...
Поискал в интернете, но не нашел подтверждения такого поведения...
У вас был какой-нибудь опыт работы с LIKE и NVARCHAR(MAX)?
[ОБНОВЛЕНИЕ]
Как очистить воздух после решения ОГА...
Я действительно понимаю, почему LIKE преобразуется... но есть проблема, что изменение @LIKE на NVACHAR(4000) не решает проблему...
В этом случае нет никакой ошибки усечения (даже SQL запускает CONVERT_IMPLICIT, теперь на комментарии), но строки с более чем 4000 буквами будут удалены без ошибок... Как-то это даже хуже, чем раньше, так как теперь ошибки нет, хотя явно есть усечение...
Что я уже пробовал:
Все, что в моих силах...
Поговорите с администратором...
Интенсивный Гугл...
На самом деле нашел несколько решений... но я ищу объяснение, почему SQL как будто заставляет меня опуститься до NVARCHAR(4000)...
Dave Kreskowiak
С какой стати вы используете подобное выражение с таким чертовски большим параметром?
Kornfeld Eliyahu Peter
Это своего рода наследство, которое я получил...
С ошибкой...
Часть моего решения-это отсутствие Макса...
Dave Kreskowiak
Ты унаследовал этот беспорядок? Я вам сочувствую. :)
Kornfeld Eliyahu Peter
Мой toooooooooo :-)