it-frosch
Goto Top

MSSQL BULK INSERT 10,5 als 10.5 einlesen möglich (deutsches Formatierung in englische Formatierung umwandeln)?

Guten Abend,

Umgebung:
MS 2012 SRV
MSSQL 2016

Ich möchte CSV Dateien mit Preisen im Format xxx,xx per BULK INSERT einlesen.
Der MSSQL Server akzeptiert nur Zahlen im Format xxx.xx weshalb ich jetzt nach einer Lösung suche.

Meine Herangehensweise wäre jetzt:
Preise als VARCHAR einlesen und vor Import in Zieltabelle in das korrekte Format "umbauen".

Allerdings frage ich mich, ob das nicht effizenter geht und suche Denkanstöße oder zielführende Hinweise.

LÖSUNG:
Preise in ein Variable VARCHAR(12) einlesen und mit
SET @PREIS = REPLACE(CONVERT(varchar(12),@PREIS , 0), ',', '.');  
in das englische Zahlenformat umwandeln.

Das Datum mit
datefromparts(YEAR(@DAT), DAY(@DAT),MONTH(@DAT));

in das gewünschte Format bringen.
(Tag und Monat mussten bei mir getauscht werden.)

Grüße vom it-frosch

Content-ID: 538510

Url: https://administrator.de/contentid/538510

Ausgedruckt am: 21.11.2024 um 11:11 Uhr

wiesi200
wiesi200 23.01.2020 um 18:38:05 Uhr
Goto Top
Hallo,
Bist du dir sicher? Das liegt doch an de. Regionseinstellungen des Betriebssystems, wen. Ich mich nicht täusche.
em-pie
em-pie 23.01.2020 um 19:40:17 Uhr
Goto Top
Moin,

ist das eine einmalige Aktion oder eine wiederkehrende?
Wenn einmalig:
  • CSV in Excel öffnen
  • Spalte anpassen
  • als csv abspeichern
Fertig

Wenn wiederkehrend:
  • Mit Powershell/ Batch den Decimaltrenner austauschen
  • Danach die csv importieren
Oder:
  • CSV in eine zwischentabelle importieren
  • Daten in Zieltabelle mit insert into kopieren und dabei ein REPLACE(COLUMN, ',', '.') einbinden.

Dritte Variante:
Dem Datenerzeuger auf die Finger kloppen face-smile

Gruß
em-pie
it-frosch
it-frosch 26.01.2020 um 10:35:09 Uhr
Goto Top
Hallo wiesi200,

bei uns werden alle Server in Englisch installiert. Somit ist das schon ok. face-wink

grüße vom it-frosch
it-frosch
it-frosch 26.01.2020 um 10:48:55 Uhr
Goto Top
Hallo em-pie,

ist das eine einmalige Aktion oder eine wiederkehrende?
Das wird eine Schnittestellen für eine Abteilung zur Stammdatenpflege, also wiederkehrend.
Ich stelle ihnen die Daten in einer XLS als Export bereit (Crystal Reports exportiert die Daten im deutsch Zahlung und Datumsformat),
dann korrigieren sie den Inhalt, speichern das Ergebnis als CSV in einem Verzeichnis ab aus dem die SS die Daten in die DB einliest und
die Ursprungstabellen aktualisiert.
So der Ablauf.

Daten in Zieltabelle mit insert into kopieren und dabei ein REPLACE(COLUMN, ',', '.') einbinden.
Genau, das war das was ich mit "umbauen" meinte.

Dem Datenerzeuger auf die Finger kloppen face-smile
Der Datenbank ist das sicherlich egal und ich würde meine Finger gern dafür hinhalten wenn ich rausbekomme,
was ich falsch mache. face-wink

Wenn nicht noch jemand eine Idee hat, wie den Datenbankserver dazu überreden kann beim Bulk insert Datums- und Zahlenformat von
Deutsch nach Englisch zu wandelt, dann wird es wohl daraus hinauslaufen, dass ich mich eine Funktion baue, die das Datumsformat
nach dem Insert in die TMP Tabelle ins richtige Format umbaut.
Für die Preise kann ich wahrscheinlich mit REPLACE arbeiten.

Vielleich hat ja noch jemand eine Idee.

grüße vom it-frosch
wiesi200
wiesi200 27.01.2020 um 10:27:21 Uhr
Goto Top
Zitat von @it-frosch:

Hallo wiesi200,

bei uns werden alle Server in Englisch installiert. Somit ist das schon ok. face-wink

Genau eben nicht.
Stell doch mal beim Server in den Regionseinstellungen beim Dezimaltrennzeichen vom Punkt auf Komma um.
MadMax
Lösung MadMax 27.01.2020 um 12:37:47 Uhr
Goto Top
Hallo Frosch,

wenn die Daten sowieso in einer Excel-Datei vorliegen, könnte man unter Optionen (in Excel 2016 ist das im im Abschnitt "Erweitert") das Dezimaltrennzeichen auf den Punkt, statt dem Komma stellen, dann wird in der CSV-Datei gleich das richtige Zahlenformat gespeichert.

Ansonsten gibt es nur noch die Möglichkeiten, die schon em-pie aufgezählt hat. Mit BULK INSERT kannst Du das nicht direkt umstellen, soweit ich weiß, auch nicht mit einer Formatdatei.

Gruß, Mad Max
it-frosch
it-frosch 28.01.2020 um 09:49:05 Uhr
Goto Top
Die Regionaleinstellungen in meinem Profil habe ich schon auf Deutsch komplett umgestellt.
Oder meinst du etwas anders?
it-frosch
it-frosch 28.01.2020 um 10:06:15 Uhr
Goto Top
Hallo Mad Max,

danke für den Tip wegen des Umstelles des Dezimaltrennzeichens.

Das hilft mir zwar nicht bei dieser Sache da die MA schon mit deutschem Dezimaltrennzeichen arbeiten sollen
aber es ist sehr hilfreich.

Grüße vom it-frosch