2017-03-04 136 views
1

我想知道將數據插入到Sql Server數據庫的最快方式是什麼。 目前我使用「INSERT」命令使用SqlCommand,但它需要很多時間,因爲我必須插入很多像500k這樣的行。 你能告訴我什麼是我最好的解決方案嗎? 我也讀過,我可以使用SqlBulkCopy,你認爲這可能是一個很好的解決方案?使用C#將數據插入到Sql Server數據庫的最快方法。

+0

嘗試使用實體框架並使用模型傳遞數據https://msdn.microsoft.com/en-us/library/bb386876(v=vs.110).aspx – Thili77

+0

你的代碼是什麼樣的? 「很多」是多少時間? –

+0

可能來自http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework – Xavave

回答

1

如果你在談論常規「編程」數據導入,SqlBulkCopy是我的經驗,要走的路。否則,服務器本身的數據庫管理技巧可能更適合。

的Microsoft SQL Server包含一個名爲BCP 快速批量複製大文件到SQL Server數據庫表或視圖一個流行的命令行工具。 SqlBulkCopy類允許您編寫提供類似功能的託管 代碼解決方案。還有其他 將數據加載到SQL Server表中的方法(INSERT語句,對於 示例),但SqlBulkCopy對它們提供了顯着的性能優勢 。

我曾經爲我們工作過的一個地方,我們曾經每天導入和合並大約一百萬條記錄。我們使用了SqlBulkCopy和存儲過程的組合。批量複製將導入到「scratch」表中,存儲過程將執行INSERT INTO SELECTUPDATE SELECT (SO has questions with good examples)合併數據。整個事情過去不到一分鐘(也許是兩分鐘)。

使用SQL,您可以將信息從一個表複製到另一個表中。 INSERT INTO SELECT語句從一個表中複製數據並將其插入現有表中。

我發現BulkCopy很難維護,但性能上的好處使得它可以承受。另外,如果您有單獨的表(與DataTable匹配)來接收導入,則管理起來更容易。

+0

我試過用SqlBulkCopy,它工作得很好。我有一個問題,如果我通過SqlBulkCopy添加行,是否必須選擇數據並將數據與新行合併,或者WriteToServer()函數是否自動合併數據? – Antonio

+0

WriteToServer()不合並數據AFAIK。我建議的解決方案是,在批量導入之後,您運行特定於數據的INSERT INTO SELECT或UPDATE SELECT WHERE語句,例如,僅更新具有特定字段或時間戳的不同值的行。 – ziya

+0

剛剛通過指向UPDATE SELECT語句的鏈接編輯答案。只記得那是我們用來合併數據的東西。 – ziya

0

在使用SQLBulkCopy之前,請確保您要插入的表上的所有非聚集索引都應該被刪除,然後重新創建它,這對您的情況會更快。

相關問題