将SQLBulkCopy用于带引用的多个表

时间:2016-11-22 19:55:00

标签: c# sql-server sqlbulkcopy

我正在使用大量的JSON数据并通过SQLBulkCopy类将其存储在SQL Server数据库中。

SqlBulkCopy bulkInsert = new SqlBulkCopy(conn);
bulkInsert.DestinationTableName = "dbo.Orders";
conn.Open();
bulkInsert.WriteToServer(rows.ToArray());

rows是DataRow类型的列表。

我消耗的数据是订单,因此大部分数据都被插入到订单表中,但是其他一些表也需要插入,但是这些插入必须引用插入到其中的行。订单表。

这是可以使用SQLBulkCopy还是我必须手动插入每一行,查询插入行的数据库以获取引用字段,然后在将来的插入中使用该值?

1 个答案:

答案 0 :(得分:1)

SqlBulkCopy无法返回插入的标识值。

所以只使用SqlBulkCopy是不可能的,但可以通过使用临时表的一些技巧来实现。

简而言之:

  • 您批量插入临时表
  • 使用OUTPUT子句(获取标识值)从临时表插入到目标
  • 您可以将OUTPUT子句返回的标识值设置为每行

免责声明:我是该项目的所有者Bulk Operations

该项目通过添加一些功能克服了SqlBulkCopy限制:

  • 输出身份值
  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • 批量合并

示例:

var bulk = new BulkOperation(connection)
bulk.DestinationTableName = "dbo.Orders";

bulk.ColumnMappings.Add("OrderId", ColumnMappingDirectionType.Output);
bulk.ColumnMappings.Add("Price");
bulk.ColumnMappings.Add("Quantity");

bulk.BulkInsert(rows);