TableComparison einer datetime-Spalte über eine ODBC Verbindung
Ich hatte heute folgendes Problem in einem SAP DataServices (aka BusinessObjects DataIntegrator) Ladejob :
Ein enthaltener TableComparison hat jede, in der Zieltabelle existierende, Zeile als UPDATE detektiert, auch wenn auf den ersten Blick keine Änderungen erkennbar waren.
Verursacht wurde das Problem durch eine Timestamp/DateTime-Spalte, welche einen Timestamp inklusive Millisekunden enthielt.
Bsp.: 2012-02-02 19:19:19.135478658
Beim Schreiben dieses Wertes in die Zieltabelle, wurde der Millisekunden-Anteil vom ODBC-Treiber abgeschnitten und der Wert als
2012-02-02 19:19:19.000000000
in die Zieltabelle geschrieben.
Wird dieses Ergebnis nun später wieder verglichen, stellt der TableComparison “korrekter Weise” fest, dass der Timestamp geändert wurde:
DB: 2012-02-02 19:19:19.000000000
Input: 2012-02-02 19:19:19.135478658
und markiert die Zeile als Update.
Abhilfe bringt folgende Konvertierung vor dem TableComparison (wenn der Millisekunden-Anteil nicht benötigt wird):
to_date( to_char( TABLE.COLUMN, 'YYYYMMDDHHMISS' ), 'YYYYMMDDHHMISS' )
So wird der Millisekunden-Anteil schon beim Vergleich entfernt und keine Änderung mehr detektiert.