Я ищу способ продолжить выполнение транзакции, несмотря на ошибки при вставке данных с низким приоритетом. Кажется, что реальная вложенная транзакция может быть решением, но они не поддерживаются SQL Server 2005/2008. Другим решением было бы иметь логику, чтобы решить, является ли ошибка критической или нет, но может показаться, что это также невозможно.
Вот более подробно мой сценарий:
Данные периодически вводятся в базу данных с использованием ADO.NET/C#, и, хотя некоторые из них имеют жизненно важное значение, некоторые также могут отсутствовать без проблем. Когда вставки сделаны, для данных сделаны некоторые вычисления. (И жизненно важный, и не жизненно важный) Весь этот процесс находится внутри транзакции, поэтому все остается в синхронизации.
В настоящее время используются точки сохранения транзакций, и частичные откаты выполняются для исключений, которые происходят во время не жизненно важных операций вставки. Однако это не работает для ошибок «пакетного прерывания», которые автоматически откатывают всю транзакцию. Я понимаю, что некоторые ошибки являются критическими, но такие вещи, как сбой приведения, рассматриваются SQL Server как ошибки пакетного прерывания. ( Информация об пакетных ошибках ) Я пытаюсь предотвратить эти ошибки, приводящие к сбою всей вставки, если они возникают на данных с низким приоритетом.
Если то, что я описываю, не представляется возможным, я готов рассмотреть любой альтернативный способ достижения целостности данных, но допустить сбой нежизнеспособных вставок.
Спасибо за вашу помощь.