Benutzer mit den meisten Antworten
bulk insert

Frage
-
Guten Abend,
ich habe zwei Fragen zum bulk insert.
1. Ich bekomme mehrere Dateien geliefert, die ich mit bulk insert einlesen möchte. Allerdings kann bei den regelmäßigen Lieferungen eine (oder mehrere) dieser Dateien auch ausbleiben, wenn in der Periode keine Datensätze verarbeitet wurden. Nun möchte ich nicht, dass deshalb das Einlesen der weiteren Dateien mit einem Fehler abbricht, sondern der bulk insert für diese Datei(en) übersprungen wird. Wie wäre das möglich?
2. Innerhalb der Dateien kommen Zahlen in der Form +0013,71 oder -09,22 - also auch mit Komma.
Einen Einfluß auf das angelieferte Format habe ich nicht. Meine Überlegung ist, dies zunächst temporär in VARCHAR einzulesen, und von da aus mit CAST / CONVERT zu behandeln. Gibt es bessere Alternativen?Danke schon einmal im voraus.
Jörg
- Bearbeitet Joerg_x Montag, 20. Februar 2012 18:13
Antworten
Alle Antworten
-
Hallo Jörg
Joerg_x wrote:
1. Ich bekomme mehrere Dateien geliefert, die ich mit bulk insert
einlesen möchte. Allerdings kann bei den regelmäßigen Lieferungen eine
(oder mehrere) dieser Dateien auch ausbleiben, wenn in der Periode keine
Datensätze verarbeitet wurden. Nun möchte ich nicht, dass deshalb das
Einlesen der weiteren Dateien mit einem Fehler abbricht, sondern der bulk
insert für diese Datei(en) übersprungen wird. Wie wäre das möglich?Wie liest Du die Dateien ein? Per SSIS? Dort kannst Du einstellen, wieviele Fehler zu zulassen wisst und ob ein Fehler dazu führen soll, die Task abzubrechen.
2. Innerhalb der Dateien kommen Zahlen in der Form +0013,71 oder -09,22 -
also auch mit Komma.
Einen Einfluß auf das angelieferte Format habe ich nicht. Meine
Überlegung ist, dies zunächst temporär in VARCHAR einzulesen, und von da
aus mit CAST / CONVERT zu behandeln. Gibt es bessere Alternativen?Wenn Du mit SSIS arbeitest könntest Du auch vorgängig die Files öffnen, normieren und dann unter einem anderen Namen abspeichern. Dabei könntest Du auch gleich die Files ausscheiden, die in 1 den Fehler verursachen.
HTH
Henry -
Hallo Henry
das Einlesen erfolgt in dieser Form:
BULK INSERT #CSVTest FROM 't:\csvtest.csv' WITH ( FIELDTERMINATOR = ';', ROWTERMINATOR = '\n' ) GO
Ich dachte man könnte in vielleicht in dieser Form vorprüfen (habe aber nichts gefunden):
IF EXISTS ('t:\csvtest.csv')
BULK INSERT #CSVTest ...Hast Du noch eine Idee?
Jörg
-
Hallo Henry,
DECLARE @datei_vorhanden int EXEC master..xp_fileexist 't:\csvtest.csv', @datei_vorhanden OUTPUT IF @datei_vorhanden = 1 BULK INSERT #CSVTest FROM 't:\csvtest.csv' WITH ( FIELDTERMINATOR = ';', ROWTERMINATOR = '\n' ) ELSE PRINT 'Datei existiert nicht.'
Wie cool finde ich das denn. Super.
Und auch die anderen schönen Sachen, die man mit EXEC master..xp_fileexist hervorholen kann. Beeindruckend.
Herzlichen Dank.