我有一個帶有記錄的數據表。我使用SqlBulkCopy將記錄插入到Sql表中。它工作正常。下一次獲取帶有相同記錄的數據表時幾乎沒有更改的值SqlBulkCopy插入另一個時間記錄集沒有更新以前的細節。我怎樣才能使用SqlBulkCopy更新Sql表?請幫忙。使用SQLBulkCopy來插入/更新數據庫
感謝, Vix指數
我有一個帶有記錄的數據表。我使用SqlBulkCopy將記錄插入到Sql表中。它工作正常。下一次獲取帶有相同記錄的數據表時幾乎沒有更改的值SqlBulkCopy插入另一個時間記錄集沒有更新以前的細節。我怎樣才能使用SqlBulkCopy更新Sql表?請幫忙。使用SQLBulkCopy來插入/更新數據庫
感謝, Vix指數
SqlBulkCopy的僅用於插入記錄,不更新他們的解釋here。您需要使用其他技術來執行批量更新。
例如你可以將SqlBulkCopy放入臨時表中,然後運行一些SQL從那裏更新到主表。
截斷表格並執行Bulkcopy。
for vix:截斷,然後批量加載是最有效的過程,如果您只想要結果表只包含批量加載記錄。 - upvoted – Chad 2009-11-09 13:34:50
對於一些簡單的情況很好,但如果您正在更新的數據有任何複雜程度,這將是一個真正的痛苦。根據app/DB的具體情況,保持數據完整性可能非常困難。例如FK關係需要保留。 – MemeDeveloper 2012-10-20 03:40:26
避免截斷表和創建一個新的臨時表,BTW消耗更多的空間和內存。
我使用INSTEAD OF INSERT創建了一個觸發器,並在MERGE語句中使用。
但不要忘記在SqlBulkCopy中添加參數SqlBulkCopyOptions.FireTriggers。
這是我的兩美分。
和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);
+1的臨時表,這正是你必須怎麼做散裝-插入更新和大量在同一表的更新,這是非常值得做的努力。 – 2009-11-09 11:53:46