2012-01-26 119 views

回答

5

最好的方法是使用bcp utilitySSIS workflow。這些工具具有諸如高速緩存和批處理等優化功能,可以在天真的實現中遺漏您的遺漏。下一個最佳選擇是BULK INSERT聲明,只要SQL Server引擎本身可以訪問該文件。最後一個選項是SqlBulkCopy類,它允許您的應用程序讀取文件,可能處理它並轉換它,然後將數據作爲枚舉器提供給SqlBulkCopy。

+0

謝謝..我會檢查 – 2012-01-26 22:21:35

+0

我用SqlBulkCopy的,但問題是我怎麼能知道使用SqlBulkCopy的總行插入.WriteToServer()函數 – 2012-01-27 14:46:48

+1

出於好奇,爲什麼你會把'SqlBulkCopy'放在其他選項後面呢? – jadarnel27 2012-01-30 21:34:17

1

我最近工作的同類問題,我意識到有幾個解決方案。

我寫了一個BatchProgram(用於批處理程序設計閱讀 - http://msdn.microsoft.com/en-us/magazine/cc164014.aspx

您可以使用SQL Server工具要麼BCP.EXE或OSQL.EXE或.NET框架提供SqlBulkCopy類。

我最終使用BCP(我得到的CSV文件,並用于格式化文件並加載數據)和OSQL(我用OSQL其中i有一個文件提供給所述存儲過程)

我還去了.NET Process類,並使用outputdatarecieved事件將BCP.exe的所有輸出記錄到控制檯(閱讀 - http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx),這工作得很好。

我也嘗試過SQLBulkCopy類,但如果您首先將數據加載到數據表(http://msdn.microsoft.com/en-us/library/ex21zs8x.aspx),它可能會很慢,如果您使用IDataReader(http://msdn.microsoft.com/en-us/library/434atets.aspx)它可能會很快。

因爲我有數百萬行,我嘗試使用CSVReader(http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader),這是非常快的。但下來的行數太多的問題在數據轉換,我沒有太多的靈活性在SQL服務器端。

我結束了使用BCP和OSQL。