2010-06-25 266 views

回答

1

根據INSERT,SqlBulkCopy是將數據批量加載到SQL Server的最快方法。我已經在博客上介紹瞭如何使用它/演示了性能here - 與使用SqlDataAdapter通過SqlDataAdapter.Update和SqlDataAdapter.InsertCommand一起發送批量插入的另一種方法相比。

在UPDATE方面,一種技術是使用SqlBulkCopy將數據批量加載到數據庫中的「臨時」臨時表中。然後,從該臨時表中運行基礎表的更新。或者,您可以使用SqlDataAdapter.Update方法與SqlDataAdapter.UpdateCommand一起使用。對於原始吞吐量,SqlBulkCopy(僅限INSERT)是理想的方式。但是,爲了處理特定記錄的錯誤,SqlDataAdapter方法很好,因爲您可以告訴它在發生故障時繼續向數據庫發送行(例如,如果您在特定記錄上遇到約束錯誤,則可以選擇ContinueUpdateOnError ,然後在最後確定那些沒有錯誤。

+0

嗨,先生,非常感謝你,是ms sql 2008能夠接受強類型對象列表的參數,例如List 。因爲我認爲2k8能夠傳遞參數類型的數據表。 – user335160 2010-06-25 09:18:16

+0

@crisgomez - SQL Server 2k8確實支持表值參數 - 所以你可以通過在一張數據表中,我也做過博客技術(將其與CSV和XML方法進行比較):http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html 與SqlBulkCopy等相比,我沒有知道什麼性能是真正的大容量數據 - 將是基準的東西,它可能會打tempdb更多 – AdaTheDev 2010-06-25 09:46:54

+0

那麼強類型列表的對象,例如列表,將MS SQL 2K8能夠傳遞? – user335160 2010-06-25 09:52:09

0

取決於您的數據訪問層的外觀。如果您正在使用企業庫,那麼我會說this。如果你使用LINQ to sql,則this

+0

怎麼樣的LINQ to SQL? – user335160 2010-06-25 08:43:26

+0

我已經更新了我的答案。 – IsmailS 2010-06-25 08:51:42

+0

這只是一個批量更新和刪除。 – user335160 2010-06-25 09:55:43