У меня есть запрос, который я только что нашел в базе данных, который не работает, что приводит к падению отчета.Основная суть запроса:
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
And Convert(int, myField) Between @StartRange And @EndRange
Теперь, myField не содержит числовые данные во всех строках [это тип nvarchar] ... но этот запрос, очевидно, был разработан так, что он заботится только оо строках, где данные в этом поле являются числовыми.
Проблема с этим заключается в том, что T-SQL (насколько я понимаю) не замыкает замыкание предложения Where, в результате чего он отключается от записей, где данныене является числовым, за исключением:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '/A' to data type int.
За исключением того, что все строки с числовым значением myField выгружаются во временную таблицу, а затем выполняются запросы для строк, где поле находится в указанном диапазоне.Что я могу сделать, чтобы это было оптимально?
Мой первый анализ, чтобы попытаться проанализировать возвращенные данные и посмотреть, что происходит:
Select *
From (
Select *
From table
Where IsNull(myField, '') <> ''
And IsNumeric(myField) = 1
) t0
Where Convert(int, myField) Between @StartRange And @EndRange
Но я получаю ту же ошибку, ясделал для первого запроса, который я не уверен, что понимаю, так как я не преобразовываю данные, которые не должны быть числовыми на данный момент.Подзапрос должен был вернуть только те строки, в которых myField содержит числовые данные.
Может быть, мне нужен утренний чай, но имеет ли это смысл для кого-нибудь?Еще один набор глаз поможет.
Заранее спасибо