У нас есть некоторый критический код, основанный на .NET SqlBulkCopy API. Иногда этот код завершается ошибкой со следующей ошибкой:
System.Data.SqlClient.SqlException : Insert bulk failed due to a schema change of the target table.
Это сообщение в блоге предполагает, что это временная, почти непредсказуемая ошибка. Что мне интересно, так это то, что при возникновении этой ошибки гарантируется, что строки не были вставлены (если это так, я могу просто перехватить это исключение и повторить операцию BCP на стороне .NET)?
Я использую SqlServer 2008.
Вы должны использовать SqlBulkCopy Constructor (SqlConnection, SqlBulkCopyOptions, SqlTransaction)
, который принимает параметр для SqlTransaction
. В этом случае SqlTransaction
Bulk copy выполнит операцию, и в случае сбоя у вас будет возможность отката.
Вы также можете увидеть: операции транзакции и массового копирования
Операции массовой копии могут выполняться как изолированные операции или как часть многоступенчатой транзакции . Этот последний параметр позволяет выполнять более одной операции массовой копии в рамках одной транзакции, а также выполнять другие операции с базой данных (такие как вставки, обновления и удаления), сохраняя при этом возможность совершать или откатывать всю транзакцию .