如何在SQL BULK COPY中获取标识值?

时间:2016-10-27 08:05:26

标签: c# sql-server sqlbulkcopy

我必须从SQLBULKCOPY之后的表中获取IDENTITY值到同一个表。数据量可能是数千条记录。

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

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

简而言之,该项目通过添加MUST-HAVE功能(例如输出插入的标识值)来克服SqlBulkCopy限制。

在幕后,它使用SqlBulkCopy和@Mr Moose回答的类似方法。

var bulk = new BulkOperation(connection)

// Output Identity Value
bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);

// Map Column
bulk.ColumnMappings.Add("Code");
bulk.ColumnMappings.Add("Name");
bulk.ColumnMappings.Add("Email");

bulk.BulkInsert(dt);

编辑:回答评论

  

我可以简单地得到一个IList,或者简单地说,我看到它保存在customers表中,但是没有变量我可以抓住它,你能帮忙吗?所以,我在Orders.CustomerID表中插入

这取决于您可以在订单CustomerRef中保留对名为DataTable的客户数据路的引用。

因此,一旦您合并了客户,您就可以轻松地从订单数据表中的列CustomerID填充列CustomerRef

以下是我想说的一个例子:https://dotnetfiddle.net/Hw5rf3

答案 1 :(得分:0)

我使用了与Marc Gravell类似的this one解决方案,因为首先导入临时表很有用。

我还使用了Jamie Thomson on this post所描述的MERGEOUTPUT来跟踪我插入临时表中的数据,以便将其与生成的ID相匹配我要插入的表的IDENTITY列。

当您需要将该ID用作正在填充的其他表的外键引用时,这非常有用。

答案 2 :(得分:0)

试试这个

CREATE TABLE #temp 
(
    DataRow varchar(max)
)
BULK INSERT #Temp FROM 'C:\tt.txt'  

ALTER TABLE #temp
ADD id INT IDENTITY(1,1) NOT NULL

SELECT * FROM #temp

答案 3 :(得分:-3)

readSingleImage(...)