2016-03-30 20 views
1

Bir SQL Server tablosuna eklemem gereken 36 sütun içeren 8,500 satır var ve şu anda 9 dakika alıyor. Bunu yapmanın daha hızlı bir yolu olup olmadığını merak ediyordum. Toplu ekleri okudum ama bunu son çare olarak kaydediyorum.Excel'de satırları SQL Server'a dışa aktarmanın daha hızlı bir yolu var mı?

Şu anda bunu nasıl yapıyorum, her bir döngü için kullanıyorum ve her hücrenin düzgün biçimlendirilip biçimlendirilmediğini kontrol etmek için bir if ifadesi kullanıyorum (muhtemelen bir nedeninin yavaş olmasına rağmen oraya ihtiyacım var). Ve hepsini bir kerede ihraç edilmek için birleştiriyorum.

Şimdiden teşekkürler.

+0

indirebilirsiniz Yani bir VBA tabanlı bir çözüm olup T-SQL arıyorsun? Döngünün içinden geçtiğiniz süreçleri gösteren örnek kod sağlayabilir misiniz? Verimliliği toplayan ilk yer burası olurdu. – Jeeped

+0

Çalıştıktan sonra yapacağım. Sadece bir csv dosyasını sadece vba veya daha hızlı olacak bir şeyi kullanarak sql'ye dışa aktarmanın bir yolu olup olmadığını düşünüyordum. –

+0

Verme işleminin sql sunucusuna dışa aktarılmasını ayırın. Ağ yükünü en iyi duruma getirmek için, saklanan proc oluşturabilirsiniz, böylece sadece değerler iletilir. – teenboy

cevap

1

İlk olarak,

Download Here - Driver

sonra SQL Sever bu sorguyu yürütmek SQl-sunucu sizin örneğinde bu sürücüyü ([Microsoft.ACE.OLEDB.12.0]) yüklemeye neeed:

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

bu karakteri çıkarmayın "$"

+0

Bunun ne yaptığını biraz açıklıyor musunuz? –

+0

Thomas, belki sizin için kaydettiğim bir sonraki video size yardımcı olabilir: https://drive.google.com/file/d/0B3p88EQFnMR_SU56SDFBNE1MdEU/view?usp=sharing –

0

Sen ölçüde bir dizi ile çalışarak ve que inşa etmek için bir tampon kullanarak performansı artırabilir ry. 10000 satırlık bir sorgu oluşturmak için yalnızca birkaç milisaniye gerekir. Sana SQL Server Excel veri verebilirsiniz bir Excel Add-In oluşturduk

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

teşekkürler! Bunu deneyeceğim –

0

: İşte bir örnek. 8500 satır ve 40 sütun ile bir test yaptı ve Excel'de SQL Server'a satırları eklemek için 4.5 saniye sürdü.

Bir commerial prodcut olarak satıyorum, ancak eğer zaman sınırlı bir işse, tam işlevsel denemeyi ücretsiz olarak kullanabilirsiniz (ve ihtiyacınız varsa, bana sadece bir e-posta gönderirim ve sizin için deneme süresini uzatırım).

Burada http://sqlspreads.com/download-sql-spreads/

İlgili konular