PDA

Vollständige Version anzeigen : Zugriff SQL Server per Execute langsam


Brauni
01.05.2011, 18:27
Hallo

ich habe eben ein Projekt auf MS SQL Server 2008 R2 Express umgestellt. Jedoch habe ich leider das Problem, das mir bei meiner do loop Schleife mit ca. 35.000 Datenzeilen der dbs.execute Befehl mit Insert into Tabelle sehr langsam geht.
Ich importiere mit der Schleife eine Textdatei in den SQL Server mit dbs.execute (insert into tabelle (feld1, feld2) values (value1, value2)) etc.
Problem wird vielleicht sein, dass er bei jedem Durchlauf immer eine neue Verbindung aufbauen muss oder liege ich da Falsch?

Ansonst rennt alles wesentlich schneller als mit Access Tabellen.

Würde mich über Infos freuen! :)

lg
christian

ebs17
01.05.2011, 18:42
Warum nimmst Du nicht eine Abfrage statt 35.000?
Siehe Acc2003 - Textdatei in tab einlesen (aktualisieren)
zzgl. Acc2003 - Textdatei in tab einlesen (aktualisieren)

Brauni
01.05.2011, 18:52
danke für den promten Beitrag. Lese ich mir durch!

Mir ist eben auch aufgefallen, dass auch der docmd.execute (delete tabelle) mit den 35.000 Datensätzen extrem lange dauert. Lokal im Access geht es um ein vielfaches schneller. Hat du dafür eine Erklärung?

lg

ebs17
01.05.2011, 19:00
Ein Punkt dürfte doch sein, dass die nutzbare Bandbrete lokal deutlich höher ist als in einem Netzwerk.

Bezüglich löschen und neu anfügen: Unter Umständen könnte ein differenziertes Aktualisieren weniger Aufwand bedeuten als ein komplettes Ersetzen. Argumente dafür hatte ich z.B. hier genannt: Acc2010 - Tabelle mit dem Inhalt einer Textdatei …

Brauni
01.05.2011, 19:05
ok, gibts nicht auch irgendwie die Möglichkeit den Befehl direkt am SQL Server auszuführen?
Dann müsste die Performance ja perfekt sein.

Lanz Rudolf
01.05.2011, 19:08
Hallo
das was Eberhard geschrieben hat ist Sehr wichtig und richtig :)

etwas anderes hast du es einmal ver sucht eine Permanente verknüpfung zur externen Tabelle hezustellen ?

lies einmal dazu hier:
http://cid-0838611f737bd3d9.office.live.com/self.aspx/ACC/ACCESS%202000BU%20Begleitunterlagen.pdf
ab seite 58
(5.2 Performance Verbesserung) Lesen

Josef P.
02.05.2011, 14:05
Hallo!

gibts nicht auch irgendwie die Möglichkeit den Befehl direkt am SQL Server auszuführen?
Du kannst auch im SQL-Server die Textdatei einlesen.
Prinzip:
insert into ...
select ... from OPENROWSET('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=D:\ein\Verzeichnis;',
'SELECT * from DeineTextDatei.txt')


Oder als bulk insert:
BULK INSERT TabellenName
FROM 'D:\ein\Verzeichnis\DeineTextDatei.txt'
WITH (
... (siehe Online-Hilfe) ...
)

mfg
Josef