我必须从SQLBULKCOPY之后的表中获取IDENTITY值到同一个表。数据量可能是数千条记录。
有人可以帮我解决这个问题吗?
答案 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所描述的MERGE
和OUTPUT
来跟踪我插入临时表中的数据,以便将其与生成的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(...)