Re: Performant Excel-Daten in SQL-Server 2005 speichern

Tech-Archive recommends: Fix windows errors by optimizing your registry



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



Relevant Pages

  • Re: Performant Excel-Daten in SQL-Server 2005 speichern
    ... müssen die Daten nun auf den SQL-Server ... Dim cnPubs As ADODB.Connection ... Set cnPubs = New ADODB.Connection ...
    (microsoft.public.de.sqlserver)
  • Re: Performant Excel-Daten in SQL-Server 2005 speichern
    ... Tabelle zu schreiben benötigt der SQL-Server sehr viel weniger Zeit als 15 ... langwierig in Access ist, müssen die Daten nun auf den SQL-Server ... Server 2005 auch in etwa hin möchte. ... Set cnPubs = New ADODB.Connection ...
    (microsoft.public.de.sqlserver)
  • Re: Rechtevergabe
    ... als VMware - das kann ich dir nur aus Kundensicht sagen. ... die Verbindungsaufnahme zum SQL-Server mittels Windows-Authentifizierung ... Jetzt wurde das erste mal unter VMware auf einem virtuellen Server ...
    (microsoft.public.de.sqlserver)
  • Re: Adp to SQL 2000 Internet connection basics
    ... The only way that I know of to connect remotely and securely to a SQL-Server ... Terminal Server or its look alike Thinsoft. ... a.b.c.d,5555 (with port mapping enabled on the router and Voilà!!!! ... allready on LAN) to access the MS SQL Server 2000 throught the internet. ...
    (microsoft.public.access.adp.sqlserver)
  • Re: was tut SetIdentity?
    ... Meine Erfahrungen mit dem SQL-Server sind derzeit auch noch sehr ... SET IDENTITY_INSERT ... Zeitpunkt nur für eine einzige Tabelle auf ON festgelegt sein. ... verwendet SQL Server automatisch den neu eingefügten ...
    (microsoft.public.de.access.clientserver)