C#SqlBulkcopy插入在将SQL Server从2005更新到2014时表现不同

时间:2019-05-21 14:01:40

标签: c# sql-server sqlbulkcopy

我有一个带有这些列的表Employee

  1. ID int(主键,自动递增1)
  2. Employee_Name
  3. 工资
  4. Joining_Date(具有ASC顺序的聚簇索引)

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

但是当我们将数据保存到SQL Server 2014中时,行的顺序会根据聚簇索引列而改变。

C#代码:

DataTable dtEmployee = new DataTable();

//Inserting employee records in datatable

bulkCopy.WriteToServer(dtEmployee);

请提供行为更改(如有)以及解决方法。也欢迎采用多种设计方法

我们有两个选择-

  1. 忽略批量复制并一一插入行。连接中出现问题,由于网络问题导致回滚而中断

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

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

1 个答案:

答案 0 :(得分:2)

确保SQL批量复制操作将使您具有可以按特定顺序检索的记录的唯一方法是为每行包括一个行号。如果您已经在数据表中对数据进行了排序,则将另一列添加到SQL表中,并在数据表中添加“插入行号”或类似的内容。

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