SqlBulkCopy 插入顺序

SqlBulkCopy insert order

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

示例:id 是标识列。

服务器 1,数据库 1

TableA
id   name
1    name10
2    name20
3    name30
4    name40

服务器 2,数据库 1

TableA
    id   name
    1    name1
    2    name2
    3    name3
    4    name4
    ..........
    ..........
    5000 name22
    5001 name33

问题:resultDt 中的 id 是否代表所有行的 dt 中的 id? IE,。

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

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

批量插入时似乎无法保证顺序。所以我在目标 table 中添加了一个临时 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。问题已解决:)

另一种解决方案在下面link:

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

  • 使用 tableA 的相同结构创建阶段 table(例如 tmp_tableA) 没有身份。
  • 将数据批量复制到tmp_tableA。
  • 现在从 tmp_tableA.
  • 插入 tableA