У меня большой жирный запрос, который написан динамически для интеграции некоторых данных. По сути, он запрашивает некоторые таблицы, объединяет другие, обрабатывает некоторые данные и затем вставляет их в окончательную таблицу.
Проблема в том, что данных слишком много, и мы не можем доверять источникам, потому что могут быть некоторые ошибочные или противоречивые данные.
Например, я потратил почти час на поиск ошибки при разработке с использованием клиентской базы данных, потому что где-то в середине моего большого жирного запроса произошла ошибка преобразования некоторого varchar в datetime. Оказалось, что у них были какие-то даты продаж «2009-02-29», дата выхода за пределы допустимого диапазона.
И да, я знаю. Почему это хранилось как varchar? Итак, исходная база данных имеет 3 столбца для дат: «Месяц», «День» и «Год». Я понятия не имею, почему это так, но все же, это так.
Но как, черт возьми, я отнесусь к этому, если источник не заслуживает доверия?
Я не могу ОБРАЩАТЬСЯ с исключениями, мне действительно нужно, чтобы оно вышло на новый уровень с исходным сообщением, но я хотел предоставить некоторую дополнительную информацию, чтобы пользователь мог хотя бы попытаться решить ее, прежде чем позвонить нам.
Поэтому я подумал о том, чтобы показать пользователю номер строки или какой-нибудь идентификатор, который, по крайней мере, дал бы ему представление о том, какую запись он должен исправить. Это также тяжелая работа, потому что будут времена, когда интеграция будет работать до 80000 записей.
А при интеграции 80000 записей одно фиктивное сообщение об ошибке: 'Преобразование типа данных varchar в тип данных datetime привело к значению datetime вне диапазона' вообще ничего не значит.
Так что любая идея будет оценена.
О, я использую SQL Server 2005 с пакетом обновления 3.
EDIT:
Хорошо, поэтому для того, что я прочитал как ответы, лучше всего проверить каждый столбец, который может иметь решающее значение для появления ошибок, и если они действительно соответствуют условию, я должен сам выдать ошибку с сообщением, которое я найдите более информативный и добавьте некоторую информацию, которая могла бы быть сохранена в отдельной таблице, или некоторые переменные, например, идентификатор строки или некоторую другую корневую информацию.