SqlBulkCopy.WriteToServer(DataTable)在我的表的索引重建过程中有时无法正常工作
可以使用以下方式轻松模拟:
在运行程序时,继续执行重建索引命令,直到程序停止:
ALTER INDEX [IX_11] ON [dbo]。TableA1重建有(SORT_IN_TEMPDB = OFF,ONLINE = ON)
ALTER INDEX [IX_12] ON [dbo]。TableA1重建为(SORT_IN_TEMPDB = OFF,ONLINE = ON)
您有时会看到没有错误(SQLBulkCopy返回的复制行数为50000),但是数据库中只有49000
代码:
SqlConnection conn = new SqlConnection(strConnection);
conn.Open();
using (SqlTransaction transaction = conn.BeginTransaction())
{
try
{
using (SqlBulkCopy bulkCopyItem = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction))
{
try
{
bulkCopyItem.BulkCopyTimeout = 300;
foreach (DataColumn col in DataTableABC.Columns)
{
bulkCopyItem.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
bulkCopyItem.BatchSize = 100;
bulkCopyItem.DestinationTableName = "dbo.TableA1";
bulkCopyItem.WriteToServer(DataTableABC); // prove await also can cause problem
transaction.Commit();
}
catch (Exception ex)
{
_logger.Error("Message=" + ex.Message + " ;" + TaskNo);
transaction.Rollback();
}
}
}
catch (Exception ex)
{
_logger.Error("Message=" + ex.Message + " ;" + TaskNo);
}
}
conn.Close();
注意:
由于我想使用现有事务并进行批处理(每次100个,并且BatchSize = 100),所以找不到更好的方法来解决此问题。仅在索引重建作业开始时发生
关于如何避免此问题的任何想法?谢谢