我有一张包含100万条记录的表格。我需要能够将这些记录移动到另一个数据库和另一个表。
我正在使用存储过程来获取数据。它填充数据适配器,然后将数据bcp到新表中。
我们使用的是SQL Server 2005和C#4。我们将使用C#4.6或5.0迁移到SQL Server 2012或2014和Visual Studio 2015。如果有任何功能可以使这项工作顺利。
我的代码是否存在方法或问题,以防止数据适配器被填充,而是映射列并让BulkCopy
保持服务器端并将记录从数据库推送到新的像SSIS一样的桌子?
似乎批量拷贝本身闪电很快,但是适配器填充失败,因为它耗尽了内存,试图用100万条记录填充适配器。如果不一次做一行,我只想在表之间移动数据。
一个表有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"));
}
答案 0 :(得分:5)
您是否尝试过使用WriteToServer
的{{1}}重载,那么您根本不需要使用IDataReader
。
DataTable