В нашем приложении мы будем позволять пользователям вводить арифметические выражения (+ - * /), используя другие столбцы базы данных для чисел, которые затем анализируются приложением и записываются в базу данных в виде вычисленного столбца.Проверить арифметические переполнения в вычисленных столбцах?
Однако возникают проблемы, связанные с тем, что пользователи могут создавать выражения, которые могут вызывать исключения, когда вы используете select *
таблицу, такую как деление на ноль, арифметическое переполнение и возможные другие, с которыми я еще не сталкивался (хотя I думаю это все из них).
Наличие базы данных исключение на select *
было бы абсолютно разрушительным. Я предпочел бы переписать свое выражение во что-то, что не удавалось бы изящно, если бы они подвергли ошибкам данные.
Для деления на нуль решения довольно прост:
add [Col] as case {divisor} when 0 then N'DIVIDE-BY-ZERO' else {expression} end
Мой вопрос: что я могу сделать для арифметического переполнения? Отображение койки или явно неправильных данных в столбце не будет проблемой, но исключение будет исключать.
Как вы хотите обрабатывать случай, когда пользователь вводит значения в столбцах, которые приведут к сбою вычисленного столбца на основе значений в этих столбцах? Вы хотите предотвратить вставку или обновление? –
Абсолютно нет. Поскольку у нас есть разные клиенты, у которых есть разные способы продвижения своего бизнеса, наше приложение имеет около десятка различных способов вставки/обновления данных, начиная от входа в приложение и ввода текста в текстовые поля в фоновый сервис, который захватывает файлы Excel. Модификация всего, чтобы предотвратить плохие данные, была бы вполне инженерным проектом ... – Tinister