繁体   English   中英

SqlBulkCopy插入顺序

[英]SqlBulkCopy insert order

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

示例:id是标识列。

Server1,db1

TableA
id   name
1    name10
2    name20
3    name30
4    name40

Server2,db1

TableA
    id   name
    1    name1
    2    name2
    3    name3
    4    name4
    ..........
    ..........
    5000 name22
    5001 name33
  • Step1: var dt = select * from server1.dbo.TableA order by id;
  • Step2:SQL批量复制到server2 bulkCopy.WriteToServer(dt);
  • Step3: var resultDt = select top 4 id from server2.dbo.TableA order by id desc. 由于我们知道我们插入的记录数量,因此我使用的是“前4名”。
  • Step4: resultDt.DefaultView.Sort = "id asc";

问题: 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

注意:仅举例来说,我的记录较少。 实际表包含数千条记录。

看起来大量插入时无法保证订单。 所以我在目标表中添加了一个临时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中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM