Re: Performant Excel-Daten in SQL-Server 2005 speichern
- From: "Berthold Neumann" <anmeldung@xxxxxxx>
- Date: Sat, 06 Oct 2007 11:31:39 +0200
Hallo Volker,
ich bin auch nicht der ADO-Experte.
Nur eins steht fest: Um 7 Mio. Datensätze in eine leere, nicht indizierte Tabelle zu schreiben benötigt der SQL-Server sehr viel weniger Zeit als 15 Minuten. Die genaue Zeit hängt natürlich vom Server und von den Datensätzen ab.
Der Haupanteil Deiner Transferzeit dürfte für das Auslesen aus Excel und die VB-Aufbereitung draufgehen. Probier es einfach mit einem normalen Recordset aus, das Du nicht wegschreibst.
In die eigentliche VB-Programmierung mische ich mich lieber nicht ein.
Gruß
Berthold
Am 06.10.2007, 11:02 Uhr, schrieb Volker <Volker.Biedermann@xxxxxxxxx>:
On 6 Okt., 09:56, "Berthold Neumann" <anmeld...@xxxxxxx> wrote:Moin Volker,
Bei 7 Mio. Datensätzen gehe ich mal vom Einsatz einer Standard-Edition
(also kein Express) aus.
Dann stehen auch die SSIS zur Verfügung und damit wird die
Aufgabenstellung ganz einfach:
- SSIS-Paket mit einer Datenflusstask erstellen
- Exceldatenquelle wählen
- OLE/DB-Datenziel wählen
- Los gehts
Soll die Lösung dagegen auf einer Express-Edition laufen, dann bist Du
hier im falschen Board. Denn in diesem Fall ist es eher eine
VB/Excel-Fragestellung.
Gruß
Berthold
Am 06.10.2007, 09:35 Uhr, schrieb Volker <Volker.Biederm...@xxxxxxxxx>:
> Hallo,
> ich muß für ein kleines Projekt aus verschiedenen Excel-Dateien, Daten
> "extrahieren" und zur weiteren Bearbeitung auf einen SQL-Servr 2005
> speichern. Das Extrahieren der Daten funktioniert auch prima und muß
> nicht diskutiert werden, einzig das Speichern der Daten soll hier
> Thema sein.
> Bis dato, haben wir die Daten in eine Access-DB (über DAO)
> gespeichert, da aber die nachfolgende Bearbeitung der Daten zu
> langwierig in Access ist, müssen die Daten nun auf den SQL-Server
> 2005.
> Nur ... wie speichere ich die Daten performant in die SQL-Server-
> Datenbank? Bei Access wurden 500.000 - 7.000.000 Datensätze in einer
> Zeit bis 15 Min. weggespeichert. Das ist die Zeit wo ich beim SQL-
> Server 2005 auch in etwa hin möchte. Allerdings bin ich nicht so der
> ADO-Experte daher mein Code der zwar schon funktioniert aber bestimmt
> noch nicht so optimal ist.
> -- Code --
> Public Sub verbinden()
> Dim cnPubs As ADODB.Connection
> Dim strSQL As String
> Dim timStart As Date
> Set cnPubs = New ADODB.Connection
> strSQL = "Driver={SQL Native
> Client};Server=DBServer;Database=Datenbank;Uid=Benutzer;Pwd=Passwort;"
> cnPubs.Open strSQL
> Dim rs As ADODB.Recordset
> Set rs = New ADODB.Recordset
> With rs
> .CursorLocation = adUseClient
> .CursorType = adOpenStatic
> .LockType = adLockOptimistic
> .Open "Tabelle1", cnPubs, adOpenStatic, adLockBatchOptimistic
> timStart = Now
> For i = 1 To 6000000
> .AddNew
> .Fields("F1") = "F1"
> .Fields("F2") = "F2"
> .Fields("F3") = "F3"
> .Fields("F4") = "F4"
> .Fields("F5") = i
> .Fields("F6") = "Test"
> DoEvents
> .MoveNext
> If i Mod 100000 = 0 Then
> .UpdateBatch
> Debug.Print i
> End If
> Next i
> .UpdateBatch
> Debug.Print "Zeit:" & CStr(DateDiff("s", timStart, Now)) & "s"
> .Close
> End With
> cnPubs.Close
> Set rs = Nothing
> Set cnPubs = Nothing
> End Sub
> -- Code-Ende --
> Gruß
> Volker
> PS Der Code ist meinem Excel-VBA-Makro entnommen sollte aber auch
> prima in VB (Classic9 kompilieren).
--
Berthold Neumannhttp://www.sql-ssis.de
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Hallo Berthold,
erstmal vielen Dank für deine Unterstützung, das Problem ist aber, das
die Excel-Daten
a) aus verschiedenen Excel-Dateien kommen und dann
b) diese Daten in unterschiedlich strukturierten Tabellenblättern
"abgelegt" sind, z.T.
c) sind das auch nur "halbwahre" Daten die anhand von
Metainformationen aufgewertet werden.
Eine Makrobearbeitung ist auf jeden Fall erforderlich, so das ich
jetzt nur die Access-Datensenke eben durch den SQL-Server 2005
austauschen will, da Access in der Weiterbearbeitung der Daten nicht
ausreichend performant ist. Eine View im Access braucht ca. 20 min. um
die Daten in einem gewünschten Ausgabeformat zu haben, auf dem SQL-
Server 2005, stehen die Daten in der gleichen View und gleichen Basis-
Datenmenge nach ca 30 s zur Verfügung. (Wobei die gleiche SQLs
verwendet werden.
Ich suche jetzt eben nur die schnellste Möglichkeit, um die "Rohdaten"
schnellstmöglich in den SQL-Server zu pumpen.
Board? ich dachte das ist eine Newsgroup (SCNR) .... ;-)
Gruß
Volker
--
Berthold Neumann
http://www.sql-ssis.de
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
.
- Follow-Ups:
- References:
- Performant Excel-Daten in SQL-Server 2005 speichern
- From: Volker
- Re: Performant Excel-Daten in SQL-Server 2005 speichern
- From: Berthold Neumann
- Re: Performant Excel-Daten in SQL-Server 2005 speichern
- From: Volker
- Performant Excel-Daten in SQL-Server 2005 speichern
- Prev by Date: Re: Performant Excel-Daten in SQL-Server 2005 speichern
- Next by Date: Re: Performant Excel-Daten in SQL-Server 2005 speichern
- Previous by thread: Re: Performant Excel-Daten in SQL-Server 2005 speichern
- Next by thread: Re: Performant Excel-Daten in SQL-Server 2005 speichern
- Index(es):
Relevant Pages
|