Benutzer mit den meisten Antworten
Import von CSV Daten bei gleichzeitigem hinzufügen von Kundennummer u.ä.

Frage
-
Hallo Zusammen,
ich muss gerelmäßig viele Daten von Kunden in unseren SQl Server importieren die per csv File kommen. Die Felder und das Format der Felder ist immer das gleiche. So weit so einfach. Insofern hab ich mir überlegtd as mit BULK INSERT zu machen.
BULK INSERT CSVTest FROM 'c:\csvtest.txt' WITH (FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n') GO
Aber, da die Daten von verschiedenen Kunden sind, muss vor jede importierte Zeile auch die von uns festgelegte Kundennummer. Kann mir jemand sagen, wie ich das machen kann?
Vielen Dank für Hilfe
Grüße
Patrick
- Bearbeitet Robert BreitenhoferModerator Donnerstag, 10. Juni 2010 09:32 Formatierung
Antworten
-
Hallo PatrickPatrick Pohlmann wrote:> ich muss gerelmäßig viele Daten von Kunden in unseren SQl Server> importieren die per csv File kommen. Die Felder und das Format der Felder> ist immer das gleiche. So weit so einfach. Insofern hab ich mir überlegtd> as mit BULK INSERT zu machen.>> BULK INSERT CSVTest FROM 'c:\csvtest.txt' WITH (FIELDTERMINATOR = ',' ,> ROWTERMINATOR = '\n')> GOAber, da die Daten von verschiedenen Kunden sind, muss vor jede> importierte Zeile auch die von uns festgelegte Kundennummer. Kann mir> jemand sagen, wie ich das machen kann?Wie findest Du die Kundennummer heraus? Liegt diese bereits in derDatenbank? Falls ja, kannst Du nach dem BULK INSERT einen Update auf CSVTestmachen, der die Kundennummer setzt.UPDATE CSVTest SET KundenNummer = <von Euch festgelegt> WHERE KundenNummerIS NULLGrussHenry
[MVP Office Access]- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
-
Ich würde das mit einem Zwischenschritt machen. Als erstes dein Importin eine Importtabelle und dann als nächstes dann von da der INSERT indie eigentliche Tabelle.INSERT INTO DatenTabelle (Kundennummer, Daten1, Daten2, Daten3, ...)SELECT 1234 AS Kundennummer, Spalte1, Spalte2, Spalte3, ... FROM CSVTestLutz
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 16. Juni 2010 06:35
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
-
Hallo Patrick,
eine weitere Alternative wäre mit OPENROWSET + Bulk Option zu arbeiten, man muss nur zusätzlich eine Format-Datei wie bei bcp dazulegen.
Ein Beispiel habe ich mal fürs Bankleitzahlenverzeichnis erstellt, der prinziepelle Aufbau für Deinen Fall könnte so aussehen:INSERT INTO DeineTabelle
SELECT 1234 AS [KundenNr]
,SRC.*
FROM OPENROWSET(BULK N'c:\csvtest.txt'
,FORMATFILE = N'c:\csvformat.txt'
,CODEPAGE = 'OEM'
,ERRORFILE = N'c:\csverror.txt'
) AS Src
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 16. Juni 2010 06:35
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
Alle Antworten
-
Ich würde das mit einem Zwischenschritt machen. Als erstes dein Importin eine Importtabelle und dann als nächstes dann von da der INSERT indie eigentliche Tabelle.INSERT INTO DatenTabelle (Kundennummer, Daten1, Daten2, Daten3, ...)SELECT 1234 AS Kundennummer, Spalte1, Spalte2, Spalte3, ... FROM CSVTestLutz
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 16. Juni 2010 06:35
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
-
Hallo Patrick,
eine weitere Alternative wäre mit OPENROWSET + Bulk Option zu arbeiten, man muss nur zusätzlich eine Format-Datei wie bei bcp dazulegen.
Ein Beispiel habe ich mal fürs Bankleitzahlenverzeichnis erstellt, der prinziepelle Aufbau für Deinen Fall könnte so aussehen:INSERT INTO DeineTabelle
SELECT 1234 AS [KundenNr]
,SRC.*
FROM OPENROWSET(BULK N'c:\csvtest.txt'
,FORMATFILE = N'c:\csvformat.txt'
,CODEPAGE = 'OEM'
,ERRORFILE = N'c:\csverror.txt'
) AS Src
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 16. Juni 2010 06:35
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
-
Hallo PatrickPatrick Pohlmann wrote:> ich muss gerelmäßig viele Daten von Kunden in unseren SQl Server> importieren die per csv File kommen. Die Felder und das Format der Felder> ist immer das gleiche. So weit so einfach. Insofern hab ich mir überlegtd> as mit BULK INSERT zu machen.>> BULK INSERT CSVTest FROM 'c:\csvtest.txt' WITH (FIELDTERMINATOR = ',' ,> ROWTERMINATOR = '\n')> GOAber, da die Daten von verschiedenen Kunden sind, muss vor jede> importierte Zeile auch die von uns festgelegte Kundennummer. Kann mir> jemand sagen, wie ich das machen kann?Wie findest Du die Kundennummer heraus? Liegt diese bereits in derDatenbank? Falls ja, kannst Du nach dem BULK INSERT einen Update auf CSVTestmachen, der die Kundennummer setzt.UPDATE CSVTest SET KundenNummer = <von Euch festgelegt> WHERE KundenNummerIS NULLGrussHenry
[MVP Office Access]- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 23. Juni 2010 15:48
-
Vielen Dank für die gute Hilfe. Entschuldigt, dass ich nicht schon früher reagiert habe. Ich komme nach dem Wechsel von den Newsgroups irgendwie noch nicht so gut zurecht hier.
Ich werde wohl Tatsächlich den Weg über eine Zwischentabelle nehmen. Das scheint mir am einfachsten.
Vielen Dank und viele Grüße
Patrick