У меня есть столбец TypeCode varchar (20), который имеет значения, такие как «1», «2», «3», «FOO», «BAR». Мне нужно найти максимальное целое число, которое меньше значения параметра. Что-то вроде этого:Предотвращение перезаписи запросов в SQL Server
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.
Я пытался создать представление table2 без «Foo» и значения «BAR» и присоединение вида, но вместо этого план запроса еще тоже самое.
Знаете ли вы, как предотвратить изменение оптимизатора?
PS: Я знаю, что дизайн таблицы не самый лучший, но это устаревшая база данных, и я не могу ее изменить.