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
- 第一步:
var dt = select * from server1.dbo.TableA order by id;
- 第 2 步:SQL 批量复制到服务器 2
bulkCopy.WriteToServer(dt);
- 第 3 步:
var resultDt = select top 4 id from server2.dbo.TableA order by id desc.
因为我们知道插入的记录数,所以我使用 "top 4".
- 第四步:
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
注意:为了举例,我给出的记录较少。实际 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:
- 使用 tableA 的相同结构创建阶段 table(例如 tmp_tableA)
没有身份。
- 将数据批量复制到tmp_tableA。
- 现在从 tmp_tableA.
插入 tableA
要将数据从一个数据库复制到具有相同架构的不同服务器中的另一个数据库,我打算使用 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
- 第一步:
var dt = select * from server1.dbo.TableA order by id;
- 第 2 步:SQL 批量复制到服务器 2
bulkCopy.WriteToServer(dt);
- 第 3 步:
var resultDt = select top 4 id from server2.dbo.TableA order by id desc.
因为我们知道插入的记录数,所以我使用 "top 4". - 第四步:
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
注意:为了举例,我给出的记录较少。实际 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:
- 使用 tableA 的相同结构创建阶段 table(例如 tmp_tableA) 没有身份。
- 将数据批量复制到tmp_tableA。
- 现在从 tmp_tableA. 插入 tableA