SQL Server .NET SqlBulkCopy類在異常後繼續運行

.net bulkinsert exception-handling sqlbulkcopy sql-server

我用SqlBulkCopy插入大量數據。數據源可能有一些重複的行。我是目的地表,我有一個唯一性索引。

當出現第一個重複行時,SqlBulkCopy會拋出異常並回滾內部事務。我希望它忽略異常並繼續插入。 (僅當異常行為重複行時)。

關於這個問題有一些問題,但他們都在尋找報告重複的行,我只是不關心它們。

一般承認的答案

這是與SqlBulkCopy的權衡之一 - 當我知道我有乾淨的數據時,我會使用它。如果你需要能夠在沒有乾淨數據的情況下很好地處理錯誤,那麼其他方法“更好”(儘管性能有所不同)。

繼你的另一個問題之後,SqlDataAdapter方法會給你這種能力,因為你可以設置一個ContinueOnError屬性,允許進程在發生這樣的錯誤時繼續 - 非常方便。當我需要處理來自.NET的不那麼乾淨/可能有問題的數據時,我使用這種方法。但是,正如我之前鏈接的那樣,您將看到一個性能成本。

如果您想要絕對性能並滿足保持分離的原始要求,那麼您應該在將數據加載到數據庫之前重複數據刪除。或者使用TomTom建議的方法


熱門答案

在進行批量插入之前解決問題。批量插入是專門定義為不處理這樣的東西。為此,它將SQL Server置於某種批量插入模式,這種模式更快......但是有局限性。在插入之前,所有關鍵違規都必須是handeld。

你想做的是插入一個臨時表(允許雙打),然後將MERGE插入主表(使用MERGE命令)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因