1
我有一個包含100萬條記錄的表。我需要能夠將這些記錄移動到另一個數據庫和另一個表。SQL Server批量複製插入百萬條記錄慢
我正在使用存儲過程來獲取數據。它填充一個數據適配器,然後將數據bcp到新表中。
我們在SQL Server 2005和C#4上。我們將轉向使用C#4.6或5.0的SQL Server 2012或2014和Visual Studio 2015。如果有什麼功能可以使這項工作順利。
- 爲10K記錄過程花費小於1秒
- 爲500K記錄時,DataAdapter運行的內存和處理失敗。 批處理到100k記錄,select語句是SQL中返回100k個記錄的問題,每次循環需要2分鐘。
有沒有一種方法,或者有什麼問題我下面的代碼來填充保持數據適配器,而是映射列有BulkCopy
住宿服務器端,只是從數據庫推記錄到新表像SSIS一樣?
看起來大容量拷貝本身閃電般快,但是適配器填充失敗,因爲它嘗試用100萬條記錄填充適配器的內存不足。沒有每次做1行,我只想在表格之間移動數據。
一個表有27列,其中5列不在表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"));
}
現在就試試。我相信這正是我正在尋找並無法找到的。 –
就是這樣,謝謝。在bulk.writetoserver之前只丟失了targetConn_reportDB.Open().... –