SSIS wie konvertiert string (DT_STR), um Geld (DT_CY), wenn sich die Quelle hat mehr als 2 Nachkommastellen
Habe ich eine flache Quelldatei mit Werten wie 24.209991, aber Sie brauchen, um zu laden, um SQL Server als Typ Geld. Im DTS (die ich bin die Konvertierung aus), wird dieser Wert stößt, wie 24.21. Wie wandle ich das Feld in SSIS?
Gerade jetzt, ich bin nur die änderung der Art von DT_STR zu DT_CY, und es gibt einen run error " Data-Konvertierung fehlgeschlagen. Die Konvertierung der Daten für die Spalte "Col003" zurückgegebenen status mit dem Wert 2 und " status text "Der Wert konnte nicht konvertiert werden, da von einem möglichen Verlust von Daten.".'
Verwende ich ein Daten-Konvertierungs-Aufgabe? Und was ist dann?
Ich habe auch versucht die Einstellung der Quell-Spalte, um DT_NUMERIC, und dann konvertieren, dass zu DT_CY, mit dem gleichen Ergebnis.
Habe ich auch versucht, mit Hilfe von Abgeleiteten Spalten, warf den DT_STR-Feld Col003 (DT_NUMERIC,10,2)Col003 und dann Gießen, (DT_CY)Col003_Numeric. Das ist immer ein cast-Fehler.
Flat File source, OLE DB-Ziel. Keine Probleme, nicht wahr? Was mache ich falsch?!
InformationsquelleAutor thursdaysgeek | 2012-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie haben noch keine null-Wert verwenden, Daten-Konvertierung, und stellen Sie sicher, dass Sie nicht irgendwelche komischen Zeichen (z.B. 200 US-Dollar produzieren Fehler)
Wenn Sie null-oder leere Felder in Ihrem Bereich und Sie sind mit Flatfile-Quelle, stellen Sie sicher, dass Sie ticken "Return null-Wert von der Quelle.."
Anderen trick, die ich verwendet habe, ist so etwas wie:
(taxvalue != "" ? taxvalue : NULL(DT_WSTR,50)).
in der transformation für Abgeleitete Spalte (Sie können ersetzen Sie einfach das Feld)In der Regel SSIS konvertieren nicht leeren Saiten, um richtig Geld.
InformationsquelleAutor Reza
Flat file-defaults, um alle Felder DT_STR. Verwenden Sie die Erweiterte option zum Bearbeiten der Verbindung besitzen die numerischen Bereich als float (DT_R4). Dann, in die erweiterte Bearbeitung von Flat File Quelle (auf der Registerkarte Datenfluss), festlegen, die Ausgabe-Spalte, um Geld (DT_CY).
Dann, das Feld zu konvertieren, ohne zusätzliche Umbauten. Das Problem war verlassen, die Quelle-Datei-definition als DT_STR.
InformationsquelleAutor thursdaysgeek
Aus irgendeinem Grund in meinem Szenario, das
OLE DB Destination
eigentlich war so konfiguriert, dass einDT_CY
. Allerdings ist eine Umwandlung in dieses format (unabhängig von der Länge der input-und Ziel-Daten, und egal, ob oder nicht die DatenNULL
wenn es da ist) immer verursacht das gleiche Problem.Nach dem hinzufügen von Daten-Viewern, kann ich feststellen, dass dies etwas zu tun hat mit der locale. Hier in Dänemark, wir verwenden ein Komma (
,
) als dezimal-Trennzeichen und dots (.
) als Tausender-Trennzeichen, statt das Gegenteil.Dies bedeutet, dass eine große Anzahl wie
382,939,291,293.38
würde (nach der Konvertierung zuDT_CY
) Aussehen382.939.291.293,38
. Auch wenn ich sehr bezweifelte, dass es sein könnte, das Problem, ich beschloss, das zu tun gegenüber von dem, was ich ursprünglich beabsichtigt hatte.Ich beschlossen zu gehen, um die erweiterten Einstellungen meiner
OLE DB Destination
und ändern Sie dieDT_CY
Spalte den TypDT_STR
statt. Dann habe ich noch eineDerived Column
transformation, und trat in den folgenden Ausdruck für die Transformation der Spalte vor würde die Daten am Ziel ankommen.REPLACE(SUBSTRING(Price, 2, 18), ",", ".")
woPrice
wurde die Spalte name.Zu meiner großen überraschung, das das problem gelöst ist, seit ich herausgefunden, dass meine
OLE DB Destination
war jetzt schicken die Daten als Zeichenfolge, die die SQL-Server verstanden es bestens.Ich bin sicher, dass dies ein bug! Ich war mit SQL Server 2008 haben, so könnte es gelöst wurde in späteren Editionen. Allerdings finde ich es sehr kritisch, dass eine so wesentliche Sache, die nicht richtig funktioniert!
InformationsquelleAutor Mathias Lykkegaard Lorenzen