Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

BULK INSERT mit Auslassen von Feldern, bzw. ergänzen von Feldern

Mitglied: TiCar

TiCar (Level 1) - Jetzt verbinden

28.07.2015 um 14:47 Uhr, 1501 Aufrufe, 1 Kommentar

Hi,

ich würde gerne eine CSV Datei in eine Tabelle laden und die Tabelle hat aber noch zusätzliche Felder für eine spätere Verarbeitung.

Beispiel CSV:
JobDatumEingang;Bestellnummer;Bestellposition;JobDatumDruck;...;Sprache;Gewicht

Zu jedem CSV Feld gibt es eine entsprechende Spalte in der Tabelle. Zusätzlich würde ich aber gerne noch für die spätere Verarbeitung folgende Felder in der Spalte haben und entweder mit NULL oder mit einem festen Wert füllen:

filename (Name des CSV Files)
imported (dient zur späteren Weiterverarbeitung)
ImportDate (dient zur späteren Weiterverarbeitung)

Aktueller Stand der Procedure ist wiefolgt:

DECLARE @cmd0 VARCHAR(400)
DECLARE @bulk_cmd varchar(1000)
DECLARE @inboundpath VARCHAR(400)

/* löschen alter Einträge, falls vorhanden */
DELETE FROM uz_inbound_folder
SELECT @inboundpath = reg_text FROM testDB.dbo.tx_registry WHERE reg_name = 'IP_INBOUND_KRONES'
SET @cmd0 = 'dir ' + @inboundpath + ' /B' INSERT INTO uz_inbound_folder (filename)

/* Lese das Verzeichnis in eine Tabelle ein */
EXEC master..xp_cmdshell @cmd0
/* lösche alle Einträge die ungültig sind */
DELETE FROM uz_inbound_folder WHERE filename IS NULL OR (RIGHT(filename, 3) <> 'csv' AND RIGHT(filename, 3) <> 'CSV' )
IF LEFT(@inboundpath, 1)<>'\' BEGIN SET @inboundpath = @inboundpath +'\' END
/* Ergänze den Dateipfad in der Tabelle */
UPDATE uz_inbound_folder SET filename = @inboundpath + filename

/* Start import der CSV Dateien in Importtabelle */
DECLARE @filename VARCHAR(255)
DECLARE @new_imp_id INT
DECLARE file_cursor CURSOR FOR SELECT filename FROM uz_inbound_folder
OPEN file_cursor

FETCH NEXT FROM file_cursor INTO @filename
WHILE @@FETCH_STATUS = 0
BEGIN
SET @bulk_cmd = 'BULK INSERT testDB.dbo.ut_import FROM '''+@filename+''' WITH (FORMATFILE =''c:\temp\ut_import.fmt'', CODEPAGE=''RAW'', FIELDTERMINATOR ='';'', FIRSTROW=1)'
EXEC(@bulk_cmd)
/* Ergänze Filename zu jeder importierten CSV Zeile */
UPDATE testDB.dbo.ut_import SET filename = @filename WHERE filename IS NULL
FETCH NEXT FROM file_cursor INTO @filename
END

CLOSE file_cursor
DEALLOCATE file_cursor


Das Formatfile sieht dabei so aus (die 3 Spalten habe ich rausgelöscht und den Zähler um 3 Felder von 22 auf 19 verringert
(bcp testDB..ut_import format nul -f c:\temp\ut_import.fmt -c -S STINGRAY\SQL2K8 -U sa -P sql):
9.0
19
1 SQLCHAR 0 20 "\t" 2 JobDatumEingang Latin1_General_CI_AS
2 SQLCHAR 0 20 "\t" 3 Bestellnummer Latin1_General_CI_AS
3 SQLCHAR 0 5 "\t" 4 Bestellposition Latin1_General_CI_AS
4 SQLCHAR 0 20 "\t" 5 JobDatumDruck Latin1_General_CI_AS
5 SQLCHAR 0 5 "\t" 6 Kopien Latin1_General_CI_AS
6 SQLCHAR 0 10 "\t" 7 GesamtSW Latin1_General_CI_AS
7 SQLCHAR 0 10 "\t" 8 GesamtCol Latin1_General_CI_AS
8 SQLCHAR 0 10 "\t" 9 GesamtQM Latin1_General_CI_AS
9 SQLCHAR 0 20 "\t" 10 GesamtPreis Latin1_General_CI_AS
10 SQLCHAR 0 3 "\t" 11 AnzOrdnerBreit Latin1_General_CI_AS
11 SQLCHAR 0 3 "\t" 12 AnzOrdnerSchmal Latin1_General_CI_AS
12 SQLCHAR 0 20 "\t" 13 Materialnummer Latin1_General_CI_AS
13 SQLCHAR 0 20 "\t" 14 Auftragsnummer Latin1_General_CI_AS
14 SQLCHAR 0 30 "\t" 15 AuftragsPosition Latin1_General_CI_AS
15 SQLCHAR 0 255 "\t" 16 Kommission Latin1_General_CI_AS
16 SQLCHAR 0 5 "\t" 17 DokuGruppe Latin1_General_CI_AS
17 SQLCHAR 0 2 "\t" 18 Sprache Latin1_General_CI_AS
18 SQLCHAR 0 255 "\t" 19 Sonderspezifikation Latin1_General_CI_AS
19 SQLCHAR 0 10 "\t" 20 Gewicht Latin1_General_CI_AS


Der CREATE der Tabelle sieht wiefolgt aus:
CREATE TABLE [dbo].[ut_import_krones](
[JobDatumEingang] [dbo].[T_char_20] NULL,
[Bestellnummer] [dbo].[T_char_20] NULL,
[Bestellposition] [dbo].[T_char_05] NULL,
[JobDatumDruck] [dbo].[T_char_20] NULL,
[Kopien] [dbo].[T_char_05] NULL,
[GesamtSW] [dbo].[T_char_10] NULL,
[GesamtCol] [dbo].[T_char_10] NULL,
[GesamtQM] [dbo].[T_char_10] NULL,
[GesamtPreis] [dbo].[T_char_20] NULL,
[AnzOrdnerBreit] [dbo].[T_char_03] NULL,
[AnzOrdnerSchmal] [dbo].[T_char_03] NULL,
[Materialnummer] [dbo].[T_char_20] NULL,
[Auftragsnummer] [dbo].[T_char_20] NULL,
[AuftragsPosition] [dbo].[T_char_30] NULL,
[Kommission] [dbo].[T_char_255] NULL,
[DokuGruppe] [dbo].[T_char_05] NULL,
[Sprache] [dbo].[T_char_02] NULL,
[Sonderspezifikation] [dbo].[T_char_255] NULL,
[Gewicht] [dbo].[T_char_10] NULL,
[FileName] [dbo].[T_char_255] NULL,
[imported] [dbo].[T_boolean] NULL,
[ImportDate] [dbo].[T_datum] NULL
) ON [PRIMARY]

Er meckert mich immer an "Massenladen: Unerwartetes Dateiende in der Datendatei." sprich, das er das mit dem Felder auslassen und dem Formatfile nicht wirklich blickt, oder?
Mitglied: TiCar
28.07.2015 um 15:20 Uhr
Oder wäre der bessere Weg die Zeilen gesamt erst mal in eine ##tmp einzulesen und dann per SQL in die Endtabelle zu überführen?

Geht sowas dass man eine Datenzeile, bestehend aus der kompletten Zeile der CSV per SQL so zerlegt, dass diese dann in die ut_import per INSERT INTO übertragen werden kann
Bitte warten ..
Ähnliche Inhalte
Datenbanken

SQL Server Stored Procedure - execute as - Sysadmin für xp-cmdshell und Bulk Insert

Frage von ooAlbertDatenbanken

Hi, ich habe mir eine Stored Procedure auf einem SQL Server 2008 R2 geschrieben, die einen Aufruf für xp_cmdshell ...

Batch & Shell

Powershell Bulk Import CSV DHCPReservation

gelöst Frage von banane31Batch & Shell4 Kommentare

Hallo zusammen, ich verzweifele gerade an meinem neuen Windows Server 2016 DHCP Server und den Reservierungen. Im Netz habe ...

Datenbanken

Oracle Insert Befehl

gelöst Frage von MarabuntaDatenbanken4 Kommentare

Hallo, ich habe eine Datenbank, die etwa so aussieht: Jetzt soll mit einem Insert Befehl folgendes passieren: Also habe ...

Batch & Shell

INSERT INTO funktioniert nicht

gelöst Frage von DaniBatch & Shell9 Kommentare

Guten Abend liebe Kolleginnen und Kollegen, ich gehe - wieder einmal - einer meiner Entwicklungen nach, welche ich mal ...

Neue Wissensbeiträge
Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von Frank vor 1 TagOff Topic14 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

Off Topic
Europawahl 2019
Information von Frank vor 2 TagenOff Topic44 Kommentare

Vom 23. bis 26. Mai 2019 findet die Europawahl in den Mitgliedstaaten der Europäischen Union statt (ja auch in ...

Humor (lol)

Minister wollen offenbar Ausweispflicht für .de-Domain

Information von Kraemer vor 2 TagenHumor (lol)7 Kommentare

Zitat von Golem.de: Die zuständigen Verbraucherschutzminister fordern einem Medienbericht zufolge offenbar eine Ausweispflicht für .de-Domains. Das soll Betrugsfälle mit ...

Off Topic
Was als Noob hier mal gesagt werden musste
Information von th30ther vor 4 TagenOff Topic5 Kommentare

Moinsen wertes Forum, ich möchte mich an dieser Stelle mal beim Forum generell und bei aqui speziell bedanken! Ich ...

Heiß diskutierte Inhalte
Router & Routing
ZyXEL ZyWALL USG 20 Routing
Frage von Oggy01Router & Routing27 Kommentare

Hallo, und wieder habe ich ein Problem mit dem Routing. Bis vor ein paar Tagen habe ich das mit ...

Off Topic
Europawahl 2019 - Ein Statement der Jugend
Information von FrankOff Topic14 Kommentare

Dies ist ein offener Brief. Ein Statement. Von einem großen Teil der Youtuber-Szene. Am Wochenende sind die EU-Wahlen und ...

LAN, WAN, Wireless
Welches Material ist das Richtige?
Frage von Motte990LAN, WAN, Wireless12 Kommentare

Guten Morgen Leute, ich bin aktuell damit beschäftigt in unserm neu gekauften Haus das Netzwerk einzubauen. Aktuell wurden bis ...

Router & Routing
2 Server über VPN (3. Netz) verbinden mit iptables
Frage von samsillaRouter & Routing8 Kommentare

Hallo, mein Ziel ist, zwei Netzwerke (192.168.0.X und 192.168.2.X) über ein VPN (10.8.0.X) zu verbinden. Folgender Netzwerkaufbau ist gegeben: ...