Benutzer mit den meisten Antworten
Datenkonvertierung eines money-Wertes fehlerhaft (Kopie SQL-> Access)

Frage
-
Ich kopiere mittels eines Execute-SQL-Task Daten aus einer SQL-Tabelle in eine temporäre Access-Tabelle.
Dabei wird eine Spalte bisweilen fehlerhaft kopiert.
Es handelt sich um einen money oder smallmoney-Wert in der SQL-Tabelle.
Dabei werden glatte Beträge (z.B. 100€ oder 15€) korrekt kopiert, während krumme beträge (zb. 375,23€) mit Faktor 100 abgespeichert werden (wird zu 37523,00€).
Ich habe schon recherchiert, daß die Typumwandlung in SSIS bisweilen Probleme bereitet, aber was kann ich tun ?
Antworten
-
Das liegt weniger an einer Typkonvertierung, sonder mehr am anglophonen Dezimaltrennzeichen. Die "Konvertierung" liest das Komma als Tausendertrennzeichen und nicht als Komma. Entferne alle Punkte und ersetzte Komma durch Punkte: REPLACE(REPLACE(column, '.',''), ',', '.').
- Als Antwort markiert NicoNi Montag, 6. August 2012 17:30
Alle Antworten
-
während krumme beträge (zb. 375,23€) mit Faktor 100 abgespeichert werden (wird zu 37523,00€).
Hallo Nico,
wenn das der Fall ist, wird vermutlich irgendwo der Wert zunächst als String behandelt und dann in Money konvertiert. Beim en-US Format ist das Komma der Tausendertrenner und wird beim konvertieren ignoriert, so wird aus 375,25 => 37525.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Klingt plausibel - nur wie löse ich das Problem.
Mit einem DataViewer zwischengeschaltet sehe ich nur, daß die daten der SQL-Tabelle korrekt zu sein scheinen.
Ich vermute also, daß die ADO.NET-Destination, welche die zeieln in der Access-Tabelle abspeichert der Übeltäter ist.
Dort finde ich im erweiterten Editor, daß die betrffende SPalte den Typ DT_NUMERIC hat.
Ändere ich diesen Typ auf DT_CY, bekomme ich eine Fehlermeldung.
Im nächsten Schritt habe ich eine Datenkonvertierung eingefügt, die den Wert in DT_Numeric konvertiert. Jetzt ist der Faktor 100 raus, dafür fehlen die Nachkommaanteile.
-
Das liegt weniger an einer Typkonvertierung, sonder mehr am anglophonen Dezimaltrennzeichen. Die "Konvertierung" liest das Komma als Tausendertrennzeichen und nicht als Komma. Entferne alle Punkte und ersetzte Komma durch Punkte: REPLACE(REPLACE(column, '.',''), ',', '.').
- Als Antwort markiert NicoNi Montag, 6. August 2012 17:30
-