Sie können drastisch die Leistung durch die Arbeit mit einem Array verbessern und durch einen Puffer mit dem que bauen Ry. Es sollte nur ein paar Millisekunden dauern, um eine Abfrage mit 10000 Zeilen zu erstellen. Hier ist ein Beispiel:
Sub build_query()
Dim buffer As String, length&, data(), r&, c&
' load the data in an array '
data = Range("A2:C5")
' create the string buffer '
buffer = String$(2048, vbNullChar)
' write the header '
Append buffer, length, "INSERT INTO [MyTable] ('ColA', 'ColB', 'ColB') Values(" & vbCrLf
' iterate each cell '
For r = 1 To UBound(data)
Append buffer, length, "("
For c = 1 To UBound(data, 2)
If c > 1 Then Append buffer, length, ","
' convert each type '
Select Case VarType(data(r, c))
Case vbDate:
Append buffer, length, format(data(r, c), "'yyyy-mm-dd HH:nn:ss'")
Case vbString:
Append buffer, length, "'" & data(r, c) & "'"
Case Else:
Append buffer, length, CStr(data(r, c))
End Select
Next
Append buffer, length, ")," & vbCrLf
Next
' write the footer '
length = length - 3 ' remove comma '
Append buffer, length, ");"
' display the result '
Debug.Print Left$(buffer, length)
End Sub
Private Sub Append(buffer$, length&, text$)
length = length + Len(text)
If length > Len(buffer) Then
buffer = buffer & String$(Len(buffer) * (length \ Len(buffer)), vbNullChar)
End If
Mid$(buffer, length - Len(text) + 1) = text
End Sub
So suchen Sie nach einer VBA-basierten Lösung und nicht den T-SQL? Können Sie Beispielcode bereitstellen, der die Prozesse zeigt, die Sie in der Schleife durchlaufen? Das wäre der erste Ort, an dem die Effizienz gesteigert werden kann. – Jeeped
Ich werde es nach dem Laufen fertig machen. Ich habe gerade darüber nachgedacht, ob es eine Möglichkeit gibt, einfach eine CSV-Datei zu sql zu exportieren, nur mit vba oder etwas, das schneller ist. –
Trennen Sie die Validierung vom Export auf SQL Server. Um die Netzwerklast zu optimieren, können Sie Stored Proc erstellen, sodass nur Werte übergeben werden. – teenboy