复制SQL数据的最快方法

时间:2010-07-01 16:25:59

标签: asp.net sql ms-access console-application

我可以使用一些建议/想法。 我编写了一个控制台应用程序,它将MS Access中的表中的所有数据(我知道,但我继承了它)查询到SQL表。它每天早上作为预定任务运行。两个表之间的字段不相同。目前,我从MS Access表中选择所有数据,遍历数据集并将每一行插入SQL表。我还在这个过程中写了一个快速的日志文件。它有效,但速度不快。我很感激您可能需要改进的过程。 谢谢!

2 个答案:

答案 0 :(得分:4)

SqlBulkCopy Class

方式比单个insert语句更快。

您必须为主键增加自己的标识字段值。要做到这一点,首先抓住你离开的最后一个身份字段值:

select top 1 id_customer from customers order by id_customer desc

然后在循环浏览int时增加DataSet变量。

或者您可以改为使用GUID for primary key column

使用SqlBulkCopy的示例代码:

public static void BulkLoadDataTable(DataTable table, string destinationTable)
{
  using (SqlBulkCopy bulkCopy = new SqlBulkCopy(_connectionString))
  {
    bulkCopy.BulkCopyTimeout = 1200;
    bulkCopy.DestinationTableName = destinationTable;
    bulkCopy.WriteToServer(table);
  }
}

强类型DataTable:

using System;
using System.Data;

public class CustomersDataTable : DataTable
{
  public CustomersDataTable() : base()
  {
    base.TableName = "Customers";
    Columns.Add(new DataColumn("id_customer", typeof(int)));
    Columns.Add(new DataColumn("first_name", typeof(string)));
    Columns.Add(new DataColumn("last_name", typeof(string)));
    Columns.Add(new DataColumn("active", typeof(bool)));
  }
}

答案 1 :(得分:1)

你看过SSIS包吗?我先调查一下。如果您无权访问它,那么请查看此处提到的SqlBulkCopy类。

您还可以考虑使用SELECT statement with an INSERT