首页 > 解决方案 > C# SqlBulkcopy 插入在从 2005 年到 2014 年更新 SQL Server 时表现不同

问题描述

我有一个Employee包含这些列的表:

  1. ID int(主键,自动递增 1)
  2. 员工姓名
  3. 薪水
  4. Joining_Date(具有 ASC 顺序的聚集索引)

现在,当我们使用SqlBulkCopyC# 应用程序将数据保存到 SQL Server 2005 数据库中时,它会以与 Datatable 行相同的顺序插入行。

但是当我们将该数据保存到 SQL Server 2014 中时,行的顺序会根据聚集索引列发生变化。

C#代码:

DataTable dtEmployee = new DataTable();

//Inserting employee records in datatable

bulkCopy.WriteToServer(dtEmployee);

请提供行为变化(如果有)以及如何解决。也欢迎多种设计方法

我们有两个选择——

  1. 忽略 Bulkcopy 并一一插入行。这在连接中有问题,并且由于网络问题导致回滚而中断

  2. 通过具有时间戳列的批量复制将数据存储在表中。这样,我们可以运行一个作业,根据某个作业的时间戳将数据填充到最终表中。根据当前系统,这是不太可接受的。

这是带有 SQL Server 2005 和 SQL Server 2014 的 Windows server 2008

标签: c#sql-serversqlbulkcopy

解决方案


确定 SQL 大容量复制操作会留下可以按特定顺序检索的记录的唯一方法是为每一行包含一个行号。如果您已经在数据表中排序了数据,请在 SQL 表和数据表中添加另一列以获取“插入行号”或类似的内容。

  1. 将数字字段添加到您的数据表。
  2. 将行号放在该字段中。
  3. 将行号的数字字段添加到 SQL 表
  4. 进行批量复制
  5. 使用行号字段来确定原始数据的顺序

推荐阅读