我将数据从Excel插入SQL数据库。我不能使用批量上传,因为数据不在服务器上,我也无法访问SSIS。我有直接从Excel插入数据库的VBA代码,但我有许多数据源,并希望有一个SQL查询来插入所有数据。
我已经处理了数据并使用CONCATENATE函数将其复制到SQL中,但是有1000行限制,因此我生成了以下代码(下面),每1,000行插入两行,并包含所需的SQL语句。
我现在需要在INSERT语句之前选择行,并在文本末尾添加一个分号,并选择VALUES语句后面的行并删除前导逗号。
有人可以帮忙吗?
Sub SQLInsert()
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Worksheets(Sheet7.Name)
LastRow = sht.Range("A1").CurrentRegion.Rows.Count
For i = LastRow To 1 Step -1000
Rows(i).Insert
Range("A" & i).Select
ActiveCell.FormulaR1C1 = "VALUES"
Rows(i).Insert
Range("A" & i).Select
ActiveCell.FormulaR1C1 = "INSERT INTO data.Table (A,B,C,D)"
Next i
End Sub
我对VBA比较新,所以如果有任何错误或不良做法,请更正我的代码。
编辑: 使用下面的R3UK代码后出现一个错误。运行代码后,我发现VALUES下面的单元格包含两个记录。例如: 如果在第10行上方插入值,则包含:,(框) 和第11行包含:,(杯) 值下的行现在包含:(Box)Cup) 所有其他行都没问题。
此外,代码在工作表的最后一个数据行上方添加了一个INSERT和VALUES行。这不是问题,但效率不高,是否有任何建议可以防止这种情况?
编辑:下面我已经包含了我正在运行的VBA代码的三个屏幕截图,之前突出显示了相关的单元格,并显示了错误。
答案 0 :(得分:0)
我不确定我是否完全理解你,因为我没有sql经验,而且我自己仍然是VBA新手,但如果我理解你,你想要: 1 - 在文本中添加半冒号 2 - 删除作为字符串
中第一个字符的逗号所以,您可以通过简单地选择特定单元格并添加如下
来添加Cells(rw,cl).Value = Cells(rw,cl).Value & ";"
其中rw是行号,cl是列号(你也可以使用字母,即“A”)
并通过操纵字符串删除前导逗号:
Cells(rw,cl).Value = Mid(Cells(rw,cl).Value,2)
答案 1 :(得分:0)
首先,我摆脱了Select
,它们是贪婪的资源,在你看到的大部分代码中都没用。
然后我添加了删除逗号的代码(相同代码中的2个版本,选择你的代码)并添加一个分号:
Sub SQLInsert()
Dim sht As Worksheet, _
LastRow As Long, _
TempStart As String, _
TempEnd As String, _
TempCell As String
Set sht = ThisWorkbook.Worksheets(Sheet7.Name)
LastRow = sht.Range("A1").CurrentRegion.Rows.Count
For i = LastRow To 1 Step -1000
sht.Cells(i , 1) = CStr(CStr(sht.Cells(i , 1)) & ";")
'String variable to improve code efficiency
TempCell = CStr(sht.Cells(i + 1, 1))
If InStr(1, TempCell, ",") Then
'Hardcore version : (if there is more than one "," it will delete all of them)
'TempCell = Replace(TempCell, ",", "")
'Clean version :
If InStr(1, TempCell, ",") <> Len(TempCell) Then
TempStart = Left(TempCell, InStr(1, TempCell, ",") + 1)
TempEnd = Replace(TempCell, TempStart, "")
TempStart = Replace(TempStart, ",", "")
sht.Cells(i + 1, 1) = CStr(TempStart & TempEnd)
Else
sht.Cells(i + 1, 1) = Left(TempCell, Len(TempCell) - 1)
End If
Else
'Didn't find a comma in that cell
End If
DoEvents
Rows(i + 1).Insert
Range("A" & i + 1).FormulaR1C1 = "VALUES"
Rows(i + 1).Insert
Range("A" & i + 1).FormulaR1C1 = "INSERT INTO data.Table (A,B,C,D)"
Next i
End Sub