[英]Bulk importing text files / VB2005 / SQL Server 2005
我繼承了一個 .NET 應用程序來支持/增強它讀取幾十萬行和數百萬行之一的幾個文件。
原始開發人員給我留下了如下代碼:-
For Each ModelListRow As String In ModelListDataArray
If ModelListRow.Trim.Length = 0 Or ModelListRow.Contains(",") = False Then
GoTo SKIP_ROW
End If
Dim ModelInfo = ModelListRow.Split(",")
Dim ModelLocation As String = UCase(ModelInfo(0))
Dim ModelCustomer As String = UCase(ModelInfo(1))
Dim ModelNumber As String = UCase(ModelInfo(2))
If ModelLocation = "LOCATION" Or ModelNumber = "MODEL" Then
GoTo SKIP_ROW
End If
Dim MyDataRow As DataRow = dsModels.Tables(0).NewRow
MyDataRow.Item("location") = ModelLocation.Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "")
MyDataRow.Item("model") = ModelNumber.Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "")
dsModels.Tables(0).Rows.Add(MyDataRow)
SKIP_ROW:
Next
導入這些文件需要很長時間(嗯,將近半個小時)。
我懷疑有更好的方法來做到這一點。 我正在尋找建議。
提前致謝。
看看 BULK INSERT。
http://msdn.microsoft.com/en-us/library/ms188365(v=SQL.90).aspx
基本上,您將 SQL 服務器指向 CSV 格式的文本文件,它執行將數據拉入表格的所有邏輯。 如果您需要更多地修改它,您可以將文本文件拉到 SQL 服務器中的暫存位置,然后運行存儲的 proc 將其修改為您正在尋找的格式。
主要選項(除了從頭開始編寫自己的代碼)是:
jkohlhepp 關於將數據拉入臨時表然后清理它的建議是一個很好的建議,也是 ETL 過程中非常常見的模式。 但是,如果您的“按摩”在 TSQL 中不容易做到,那么您可能無論如何都需要一些 .NET 代碼,無論是在 SSIS 中還是在 CLR 過程中。
就您個人而言,我會在您的情況下使用 SSIS,因為看起來數據的格式不干凈,因此您可能需要一些自定義代碼來清理/重新格式化進入數據庫的數據。 但是,它確實取決於您最熟悉/最高效的方式以及您擁有的現有工具和標准。
Dim ExcelConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcelSpreadsheet.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
ExcelConnection.Open()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.