Вот мой SQLПорядок операций в
SELECT * FROM Answers
WHERE QuesID = 1 AND OptionID IN (2,5) AND CONVERT(float, ISNULL(AnswerValue, 0)) < 300
Проблема есть в наследство данные, как строка в OptionID = 6. Когда я запускаю выше запрос дает мне
Ошибка преобразования типа данных varchar в float.
Я подтвердил все данные в QuesID = 1 и OptionId IN (2,5) - все данные с плавающей запятой. Похоже, что SQL выполняет математическую часть этого sql в первую очередь, есть ли способ заставить его проверять OptionID перед запуском сравнения AnswerValue? Или я полностью покинул базу?
'ISNUMERIC' не гарантированно работает раньше, чем конверсия, и не гарантирует безопасность. 'ISNUMERIC ('£')' = '1', но он все еще не конвертируется в' float'. –
Даю вам ответ, поскольку он, похоже, работал на меня в описанном мной сценарии. – Wil