У меня есть отчет, который использовался довольно давно - фактически, система счетов компании в значительной степени опирается на этот отчет (Отказ от ответственности: я его не писал). Фильтрация основана на том, попадает ли поле типа VarChar (50) между двумя числовыми значениями, переданными пользователем.
Проблема в том, что поле, по которому данные фильтруются, теперь не только имеет простые нечисловые значения, такие как «/ A», «TEST» и множество других нечисловых данных, но также имеет числовые значения, которые кажется, бросает вызов любому типу числового преобразования, которое я могу придумать.
Следующий (упрощенный) тестовый запрос демонстрирует ошибку:
Declare @StartSummary Int,
@EndSummary Int
Select @StartSummary = 166285,
@EndSummary = 166289
Select SummaryInvoice
From Invoice
Where IsNull(SummaryInvoice, '') <> ''
And IsNumeric(SummaryInvoice) = 1
And Convert(int, SummaryInvoice) Between @StartSummary And @EndSummary
Я также пытался выполнить преобразования, используя bigint, real и float, и все они выдают мне похожие ошибки:
Сообщение 8115, Уровень 16, Состояние 2, Строка 7
Преобразование арифметической ошибки переполнения
выражение для типа данных int.
Я пробовал другие более крупные числовые типы данных, такие как BigInt, с той же ошибкой. Я также пытался использовать подзапросы, чтобы обойти проблему преобразования, только извлекая поля, содержащие числовые данные, и затем преобразовывая их в запросе оболочки, но затем я получаю другие ошибки, которые являются вариациями темы, указывающими, что значение хранится в поле SummaryInvoice не может быть преобразовано в соответствующий тип данных.
Если не извлекать только те записи с числовыми полями SummaryInvoice во временную таблицу, а затем запрашивать временную таблицу, есть ли одношаговое решение, которое решило бы эту проблему?
Редактировать : Вот данные поля, которые, как я подозреваю, вызывают проблему:
SummaryInvoice
+11111111111111111111111111
IsNumeric указывает, что это поле числовое - оно равно . Но попытка конвертировать его в BigInt вызывает арифметическое переполнение. Есть идеи? Похоже, это не единичный инцидент, похоже, было несколько записей, заполненных данными, которые вызывают эту проблему.