SqlBulkCopy插入顺序

本文关键字:顺序 插入 SqlBulkCopy | 更新日期: 2023-09-27 18:00:27

要将数据从一个数据库复制到具有相同架构的不同服务器中的另一个数据库,我计划使用C sharp库中的SqlBulkCopy类。SqlBulkCopy在插入记录时是否会保持与数据表中相同的顺序?

示例:id是标识列。

服务器1,db1

TableA
id   name
1    name10
2    name20
3    name30
4    name40

服务器2,db1

TableA
    id   name
    1    name1
    2    name2
    3    name3
    4    name4
    ..........
    ..........
    5000 name22
    5001 name33
  • 步骤1:var dt = select * from server1.dbo.TableA order by id;
  • 步骤2:SQL大容量复制到server2 bulkCopy.WriteToServer(dt);
  • 步骤3:var resultDt = select top 4 id from server2.dbo.TableA order by id desc.由于我们知道插入的记录数量,我使用"top 4"
  • 步骤4:resultDt.DefaultView.Sort = "id asc";

问题:resultDt中的id是否表示所有行的dt中的id?即.

5002 from server2 = 1 from server1
5003 from server2 = 2 from server1
5004 from server2 = 3 from server1
5005 from server2 = 4 from server1

注:为了举例说明,我给出的记录较少。实际表包含数千条记录。

SqlBulkCopy插入顺序

在批量插入时,似乎无法保证订单。因此,我在目标表中添加了一个临时id列。流程如下:

Step1: var dt = select *, id as tempId from server1.dbo.TableA order by id;
Step2: SQL bulk copy into server2 bulkCopy.WriteToServer(dt);
Step3: var resultDt = select top 4 id, tempId from server2.dbo.TableA order by id desc. Since we know the number of records we inserted I am using "top 4".

现在id将是由server2生成的新id,tempId将是来自server1的id。问题已解决:)

下面的链接中提供了另一个解决方案:

https://social.msdn.microsoft.com/Forums/en-US/ee3d90b0-d212-4bf0-8f2a-5dcb716896eb/sqlbulkcopy-insert-order?forum=adodotnetdataproviders

  • 创建与tableA结构相同的临时表(比如tmp_tableA)没有身份
  • 将数据大容量复制到tmp_tableA中
  • 现在从tmp_tableA插入到tableA中