лежит INT, для других типов может быть что угодно
В запросе на скрине падает ошибка приведения типов, подозреваю, что операция приведения выполняется до фильтра по типу
Если убрать CAST из фильтра и сравнить как строку или использовать TRY_CAST, запрос работает корректно
Есть ли способ поднять приоритет первому фильтру, чтобы не выполнять TRY_CAST на всей таблице?
Try_cast вернет null в случае ошибки, поэтому запрос выполняется. А с CAST он не выполняется из-за не подходящего типа данных, надо разбираться что прилетает
Тут дело в приоритетности, так как вот такой запрос, например, выполняется нормально
Судя по этому скрипту ты хочешь получить тоже самое что и указано в условии WHERE Проверь что прилетает в bar.value без приведения типа, похоже там нет значения 777 А ещё лучше с ошибкой скрин показать)
Это демо, в самом скрипте дёргается цепочка вью Неудачная демка, завтра попробую воспроизвести более приближённо к реальности Ошибка Conversion failed when converting the nvarchar value 'ttt' to data type int.
@mogilevtsevdmitry этот же скрипт без фильтра в выборке отрабатывает нормально Под TypeId=1 все данные ок Просто каст в фильтре проходит по всей таблице без учёта TypeId=1, судя по всему
Чёза таблица-кэш?
Не, не так. операция приведения выполняется В ЛЮБОМ ПОРЯДКЕ с фильтром. Причём, если у тебя SQLServer (вроде похоже что да) ошибка каста фатальна и разрывает соединение с клиентом, если мне память не изменяет.
Но вы же смелые парни, вы делаете то, что никто делать не смеет - идёте на нарушение доменной целостности данных... Ну, вот и получите...
Тебе просто повезло тут... Но так будет не всегда
Обсуждают сегодня