使用Excel VBA ADODB批量导入CSV到SQL Server

我试图从CSV文件导入大量的数据到SQL Sever数据库表。 我可以一行一行地写,但是这太耗时了。 在oComm.Execute期间,我在下面的“FROM [C:\ Temp \ tblOPTExportData.csv]”失败。 任何帮助,将不胜感激。

On Error GoTo err_me Dim locComm As New ADODB.Command Dim locConnection As New ADODB.Connection Dim locRst As New ADODB.Recordset Dim ee As Boolean Dim su As Boolean Dim strSQLQuery As String Dim shtDash As Worksheet Dim shtData As Worksheet Dim shtOP As Worksheet With Application ee = .EnableEvents su = .ScreenUpdating If ee Then .EnableEvents = False If Not su Then .ScreenUpdating = True End With With ThisWorkbook Set shtDash = .Sheets("Dashboard") Set shtData = .Sheets("Data") Set shtOP = .Sheets("OP") End With With locConnection .CommandTimeout = 0 .ConnectionString = "Provider=SQLOLEDB;Server=sql-ewhcld-1000; Database=xxxxxxxxxxxxxx; User ID=tenant-xxxxxxxxxxxxxxx; Password=yeahidontthinkso; Trusted_Connection=True; Pooling=True; MultipleActiveResultSets=False" .Open End With ' ____________________________ ' / \ ' | IMS Factory Model Data | ' \____________________________/ ' 'With statRng ' .Value = "Factory Model Phase Data // Importing" ' .Font.Color = 8421504 ' .Characters(Start:=29, Length:=9).Font.Color = 10192433 'Blue 'End With With shtOP endRow = .Cells(.Rows.count, 2).End(xlUp).Row 'B (2) End With If endRow < 3 Then Err.Raise Number:=vbObjectError + 20002, Source:="exportData_Excel", Description:="No data found: 'OP' sheet, column 2 (B)." If Not rangetoCSV("B3:K" & endRow, "tblOPTExportData", 201, , , "OP") Then Err.Raise Number:=vbObjectError + 30001, Description:="rangetoCSV, 'tblGates'" strSQLQuery = "INSERT INTO optData (opsType, opsUID, opsDesc, opsProgram, opsFlight, opsProductAreaL1, opsAssignee, opsGenDate, opsECD, opsStatus) " & _ "SELECT Type, UID, Description, Program, Flight, L-1 IPT, Assignee, Generated, ECD, Status FROM [C:\Temp\tblOPTExportData.csv]" With oComm .ActiveConnection = locConnection .CommandText = strSQLQuery .Execute End With 

您需要使用BULK INSERT而不是INSERT INTO 。 尝试这样的事情:

 strSQLQuery = "BULK INSERT optData " & _ "FROM C:\Temp\tblOPTExportData.csv " & _ "WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', " & _ "ROWTERMINATOR = '\n', TABLOCK)" With oComm .ActiveConnection = locConnection .CommandType = adCmdText .CommandText = strSQLQuery .Execute End With