2009-11-09 69 views
9

我有一個帶有記錄的數據表。我使用SqlBulkCopy將記錄插入到Sql表中。它工作正常。下一次獲取帶有相同記錄的數據表時幾乎沒有更改的值SqlBulkCopy插入另一個時間記錄集沒有更新以前的細節。我怎樣才能使用SqlBulkCopy更新Sql表?請幫忙。使用SQLBulkCopy來插入/更新數據庫

感謝, Vix指數

回答

15

SqlBulkCopy的僅用於插入記錄,不更新他們的解釋here。您需要使用其他技術來執行批量更新。

例如你可以將SqlBulkCopy放入臨時表中,然後運行一些SQL從那裏更新到主表。

+0

+1的臨時表,這正是你必須怎麼做散裝-插入更新和大量在同一表的更新,這是非常值得做的努力。 – 2009-11-09 11:53:46

3

截斷表格並執行Bulkcopy。

+0

for vix:截斷,然後批量加載是最有效的過程,如果您只想要結果表只包含批量加載記錄。 - upvoted – Chad 2009-11-09 13:34:50

+0

對於一些簡單的情況很好,但如果您正在更新的數據有任何複雜程度,這將是一個真正的痛苦。根據app/DB的具體情況,保持數據完整性可能非常困難。例如FK關係需要保留。 – MemeDeveloper 2012-10-20 03:40:26

2

避免截斷表和創建一個新的臨時表,BTW消耗更多的空間和內存。

我使用INSTEAD OF INSERT創建了一個觸發器,並在MERGE語句中使用。

但不要忘記在SqlBulkCopy中添加參數SqlBulkCopyOptions.FireTriggers。

這是我的兩美分。

-1

和AdaTheDev一樣,SqlBulkCopy只能插入,但是有一個允許執行Upsert操作的替代庫。

免責聲明:我的項目Bulk Operations

批量操作庫具有基於指定鍵插入或更新行的方法「BulkMerge」的所有者。

var bulk = new BulkOperation(connection); 

bulk.ColumnMappings.Add("ID", true); 
bulk.ColumnMappings.Add("Column1"); 
bulk.ColumnMappings.Add("Column2"); 
bulk.ColumnMappings.Add("Column3"); 

bulk.BulkMerge(dt); 
相關問題