[英]SQL Server bulkcopy insert million records is slow
我有一張有100萬條記錄的表。 我需要能夠將這些記錄移動到另一個數據庫和另一個表。
我正在使用存儲過程來獲取數據。 它填充一個數據適配器,然后bcp將數據放入新表中。
我們使用的是SQL Server 2005和C#4。我們將使用C#4.6或5.0遷移到SQL Server 2012或2014和Visual Studio 2015。 如果有任何功能可以使其正常工作。
有沒有辦法,或者下面的代碼有什么問題,可以防止數據適配器被填充,而是映射列並使BulkCopy
保留在服務器端,而只是將記錄從db推送到新表,例如SSIS?
似乎大容量副本本身快如閃電,但適配器填充失敗,因為它用盡了內存,試圖用一百萬條記錄填充適配器。 一次不做1行,我只想在表之間移動數據。
一個表具有27列,其中5個不在表2中,而表2具有32列,並且某些列在兩個表中的名稱不同。
這是概念證明(PoC)。
sourceConn_transDB.Open();
SqlCommand sourceCommand = new SqlCommand(queryString, sourceConn_transDB);
DataTable table = new DataTable();
sourceCommand.CommandTimeout = 600;
using (var adapter = new SqlDataAdapter(sourceCommand))
{
WriteLineWithTime("Adapter Fill");
adapter.Fill(table);
}
if ((table == null) || (table.Rows.Count <= 0))
break;
using (SqlBulkCopy bulk = new SqlBulkCopy(targetConn_reportDB, SqlBulkCopyOptions.KeepIdentity, null) { DestinationTableName = "PatientEvent" })
{
bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping("PatientID", "PatientID"));
}
您是否嘗試過使用帶有IDataReader
的WriteToServer
重載,那么根本不需要使用DataTable
。
sourceConn_transDB.Open();
using(SqlCommand sourceCommand = new SqlCommand(queryString, sourceConn_transDB))
{
sourceCommand.CommandTimeout = 600;
using (SqlDataReader reader = sourceCommand.ExecuteReader())
using (SqlBulkCopy bulk = new SqlBulkCopy(targetConn_reportDB, SqlBulkCopyOptions.KeepIdentity, null) { DestinationTableName = "PatientEvent" })
{
bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping("PatientID", "PatientID"));
bulk.WriteToServer(reader);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.