Benutzer mit den meisten Antworten
Umlaute gehen beim Massenimport nach SQL-Datenbank verloren

Frage
-
Guten Tag zusammen,
ich versuche verzweifelt, eine mit Excel gespeicherte csv-Datei mit der Codierung "Unicode" per Massenimport mit Bulk Insert in eine SQL-Datenbank zu importieren.
BULK INSERT @myTable FROM 'Test.csv' WITH (DATAFILETYPE = 'widechar', CODEPAGE='850', FIELDTERMINATOR = ';', ROWTERMINATOR = '\n')
Leider werden die Umlaute immer noch mit dem kryptischen Zeichen dargestellt, auch wenn ich den DATAFILETYPE ändere.
Hat jemand da eine Lösung parat???
Ich würde mich über eine Antwort freuen.
MFG Jürgen
Antworten
-
Hallo zusammen,
"Asche auf mein Haupt!"
Ich habe durch das Kopieren von Code die falsche @myTable angesprochen!!! :(((
Nach Richtigstellung der myTable ist alles importiert problemlos worden!!
"DER GEHT!!! ICH DRÜCK AUF ON UND ... DER GEHT!!!
"EIN GANZES WOCHENENDE NEN SCHWOARZEN BILDSCHIRM UND ICH DRÜCK AUF ON UND DER GEHT"
Danke an ALLE.
Gruß Jürgen
- Als Antwort markiert Jürgen Sch Donnerstag, 13. August 2015 09:19
Alle Antworten
-
Hallo Jürgen,
warum gibt's Du hier Codepage=850 an? Zum einen ist das so eine uralte CP, die noch nicht mal das € beinhaltet, zum anderen forcierst Du damit ein Konvertierung nach ASCII in eben diese Codepage. Gibt hier besser RAW an; siehe BULK INSERT (Transact-SQL)
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Hallo Jürgen,
wie sieht den das Ergebnis aus, wenn Du die Datei komplett einmal über OpenRowset einliest, werden da die Umlaute angezeigt? Welche Datentypen verwendest Du in der Zieltabelle; für Unicode muss es NVarchar/NChar sein?
SELECT * FROM OPENROWSET(BULK N'c:\temp\bcptest.txt' ,SINGLE_NCLOB ,CODEPAGE = 'RAW') AS bcp
Olaf Helper
[ Blog] [ Xing] [ MVP] -
Hallo Olaf,
dein Openrowset funktionierte auch nicht. Aber ich habe es jetzt geschafft. Es lag offensichtlich an der Datei.
Meine Lösung:
- csv-Datei in Excel öffnen
- Datei mit Speichern unter... (*.txt Unicode) speichern
- txt-Datei mit Editor öffnen und alle Tabulatorzeichen durch ; ersetzen und speichern
Dann lief alles einwandfrei mit meinem Bulk Insert und alle Umlaute waren vorhanden.
Komisch war für mich, dass, wenn ich in Excel die Datei mit Speichern unter...(*.csv Trennzeichen) und der Typauswahl unter "Tools/Weboptionen/Codepage 'Unicode'" abgespeichert hatte, diese gar nicht in Unicode vorlag. :-(
Komisch war auch, dass wenn man die csv-Datei in Excel mit (*.txt Unicode) speichert, als Feldtrenner ein TAB-Zeichen gesetzt wird.
Vielen Dank für Deine Hilfe!
MFG Jürgen
-
Tatsächlich!!!
Öffne ich die csv-Datei im Notepad, so war dort die Codierung auf Ansi gesetzt. Wähle ich beim Speichern im Notepad die Codierung Unicode, werden die Umlaute auch mit meinem Bulk Insert in die Datenbank übernommen.
Recht herzlichen Dank.
Ich habe nämlich insgesamt 10 csv-Dateien (Katalogdateien), davon eine mit annähernd 1 Mio. Datensätzen (3 Felder), die ich nach dem Erstellen der Datenbank und der Tabellen mit C#-Code mit C#-Code importieren muss.
Damit erspare ich mir doch einige Schritte. :-)))
-
Hallo Jürgen,
1 Mio. Datensätze, lies das der Editor noch schnell genug ein!?
Daher gleich noch ein Tipp, hat zwar nicht direkt mit dem Thema zu tun - aber da ich in einen ähnlichen Fall, selbst mal nach einem Editor der sehr große Text-Dateien "frisst" gesucht habe.
https://de.emeditor.com/ bis zu 248GB!!!
Da Du die Daten mit C# importiert, wirst Du den Editor zwar nicht benötigen - aber man weißt ja nie.
Gruß
Herbert -
Den Editor kenne ich nicht, aber ich verwende sehr gerne Notepad++:
https://notepad-plus-plus.org/Dort sind auch zahlreiche Möglichkeiten zur Konvertierung enthalten.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu -
Den Editor kenne ich nicht, aber ich verwende sehr gerne Notepad++:
https://notepad-plus-plus.org/Dort sind auch zahlreiche Möglichkeiten zur Konvertierung enthalten.
Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmuDen nehme auch sehr gerne, aber bei großen Text-Dateien >1GB streikt dieser sehr gute Editor "Notepad++" auch. :-(
Deswegen habe ich den anderen Editor "EM-Editor" erwähnt, ist der einzige mit dieser Fähigkeit den ich gefunden habe!
-
Hallo Herbert, Hallo Christoph,
danke für die Hinweise auf mögliche Editoren.
Ich selbst habe auch den Notepad++. Der kann allerdings nicht in Unicode umwandeln. Der schafft zwar UTF-8 und UCS2, aber diese Codierungen werden vom SQL-Server nicht akzeptiert.
Ich habe das mit den 10 Dateien ja jetzt auch hinbekommen.
Allerdings habe ich jetzt ein anderes Problem und bin fast am verzweifeln:
Ich habe in Excel eine Tabelle mit 4 Spalten generiert:
[ID];[Nummernblock];[MailboxKennung];[Provider]
Diese habe ich in eine Test.txt Datei gespeichert, dann diese Datei im Editor geöffnet und mit Unicode gespeichert.
Beispieldatensätze:
1;015678;NN;Argon Networks UG
2;015080;33;Easy World CallTabelle in SQL-Server-DB:
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Nummernblock] NVARCHAR(6) NOT NULL,
[MailboxKennung] NVARCHAR(2) NOT NULL,
[Provider] NVARCHAR(max) NOT NULL
Mit Abfrage:
BULK INSERT @myTable FROM 'Test.txt' WITH (DATAFILETYPE = 'widechar', CODEPAGE='RAW', FIELDTERMINATOR = ';', ROWTERMINATOR = '\n')
Als Fehler bekomme ich immer:
Meldung 4864, Ebene 16, Status 1, Zeile 11
Datenkonvertierungsfehler beim Massenladen (Typenkonflikt oder ungültiges Zeichen für die angegebene Codepage) für 1-Zeile, 3-Spalte (Länge).
Ich habe auch schon mal die eine oder andere Spalte weggelassen, NVARCHAR auf max gesetzt, immer die selben Fehler. Auch die Nachschau in einem HexEditor lieferte keine außergewöhnlichen Zeichen.
Hat einer eine Idee, was da schief läuft???
Gruß Jürgen
Nachtrag:
Mit der Abfrage:
SELECT * FROM
OPENROWSET(BULK N'd:\Test\Test.txt',SINGLE_NCLOB,CODEPAGE = 'RAW') AS bcp
werden keine Fehlermeldungen ausgegeben!!!???
- Bearbeitet Jürgen Sch Donnerstag, 13. August 2015 08:03
-
Hallo zusammen,
"Asche auf mein Haupt!"
Ich habe durch das Kopieren von Code die falsche @myTable angesprochen!!! :(((
Nach Richtigstellung der myTable ist alles importiert problemlos worden!!
"DER GEHT!!! ICH DRÜCK AUF ON UND ... DER GEHT!!!
"EIN GANZES WOCHENENDE NEN SCHWOARZEN BILDSCHIRM UND ICH DRÜCK AUF ON UND DER GEHT"
Danke an ALLE.
Gruß Jürgen
- Als Antwort markiert Jürgen Sch Donnerstag, 13. August 2015 09:19