2016-03-30 2 views
1

Ich habe 8.500 Zeilen mit 36 ​​Spalten, die ich in eine SQL Server-Tabelle einfügen muss, und derzeit dauert es 9 Minuten. Ich habe mich gefragt, ob es einen schnelleren Weg dafür gibt. Ich habe Bulk-Inserts gelesen, aber ich spare das als letzten Ausweg.Gibt es eine schnellere Möglichkeit, Zeilen in Excel nach SQL Server zu exportieren?

Derzeit, wie ich es mache, ist, dass ich eine für jede Schleife verwenden und eine if-Anweisung zu überprüfen, ob jede Zelle richtig formatiert ist (wahrscheinlich ein Grund, warum es langsam ist, aber ich brauche es dort). Und ich verkette sie alle, um sie gleichzeitig zu exportieren.

Vielen Dank im Voraus.

+0

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

+0

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. –

+0

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

Antwort

1

Zuerst neeed Sie diesen Treiber installieren ([Microsoft.ACE.OLEDB.12.0]) auf die Instanz von SQL-Server

Download Here - Driver

dann diese Abfrage auf SQL-Sever ausführen:

select * 
    into mytable 
    from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=c\desktop\myExcelfile.xlsm')...[mySheet$] 

Sie dieses Zeichen nicht entfernen

„$“
+0

Macht es Ihnen etwas zu erklären, was das bedeutet? –

+0

Thomas, vielleicht das nächste Video, das ich für dich aufnehme, könnte dir helfen: https://drive.google.com/file/d/0B3p88EQFnMR_SU56SDFBNE1MdEU/view?usp=sharing –

0

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 
+0

danke! Ich werde es versuchen –

0

ich erstellt habe eine Excel-Add-In in dem Sie Excel-Daten in SQL Server exportieren. Hat einen Test mit 8500 Zeilen und 40 Spalten und es dauerte 4,5 Sekunden, um die Zeilen in Excel zu SQL Server einzufügen.

Ich verkaufe es als ein kommerzielles Produkt, aber wenn es ein zeitlich begrenzter Job ist, können Sie den vollen Funktionsversuch kostenlos nutzen (und wenn Sie brauchen, senden Sie mir einfach eine E-Mail und ich werde den Versuch für Sie verlängern).

Sie können es hier herunterladen http://sqlspreads.com/download-sql-spreads/

Verwandte Themen