none
Datenkonvertierung eines money-Wertes fehlerhaft (Kopie SQL-> Access) RRS feed

  • 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 ?

    Montag, 6. August 2012 11:16

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
    Montag, 6. August 2012 11:49
    Moderator

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

    Montag, 6. August 2012 11:28
  • 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.

    Montag, 6. August 2012 11:42
  • 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
    Montag, 6. August 2012 11:49
    Moderator
  • Hi,

    gibt es für das Problem noch eine andere Lösung?

    Habe das gleiche Problem, allerdings mit aus Access eingebundenen Tabellen eines SQL-Servers. Da habe ich nicht immer die Möglichkeit einer Datenkonvertierung vor dem Tabellenzugriff.

    Vg

    Dienstag, 3. November 2015 07:56
  • Nein. Die Daten müssen immer konvertiert werden..

    Dienstag, 3. November 2015 09:25
    Moderator