У меня есть столбец TypeCode varchar (20), который имеет значения, такие как «1», «2», «3», «FOO», «BAR». Мне нужно найти максимальное целое число, которое меньше значения параметра. Примерно так:
select max(TypeCode) TypeCode
from table1 a
left join table2 b on b.table1id = a.id
and b.TypeCode not in ('FOO', 'BAR')
where b.TypeCode < @MaxType
, который работает большую часть времени, но в некоторых запросах SQL Server решает преобразовать его в нечто подобное (в соответствии с планом запроса).
select max(TypeCode) TypeCode
from table1 a
left join table2 b on b.table1id = a.id
and b.TypeCode < @MaxType
and b.TypeCode not in ('FOO', 'BAR')
Этот запрос, очевидно, вызывает следующую ошибку:
Conversion failed when converting the varchar value 'FOO' to data type int.
Я попытался создать представление таблицы 2 без значений 'FOO' и 'BAR' и вместо этого присоединиться к представлению, но план запроса остается прежним.
Знаете ли вы, как оптимизатор может изменить запрос?
PS: я знаю, что дизайн таблицы не самый лучший, но это устаревшая база данных, и я не могу ее изменить.