Eine 99,99 numerische aus Flat-file will nicht in einem NUMERIC (4,2) 'SQL server gehen

Ich habe eine CSV-file:

1|1.25 2|23.56 3|58.99 

Ich möchte diesen Wert in eine SQL server-Tabelle mit SSIS setzen. Ich habe meinen Tisch erstellt:

 CREATE TABLE myTable( ID int, Value numeric(4,2)); 

Mein Problem ist, dass ich eine abgeleitete Spaltenumwandlung erstellen muss, um meine Besetzung anzugeben:

 (DT_NUMERIC,4,2)(REPLACE(Value,".",",")) 

Ansonsten scheint SSIS nicht in der Lage zu sein, meinen Wert in meine Spalte zu setzen und meine Spalte mit Nullwert zu füllen.

Und ich denke, es ist tooooo hässlich, dies so zu tun. Ich möchte, dass meine abgeleitete Spalten-Transformation hier für echte neue abgeleitete Spalte, und nicht einige einfache Besetzung, die ich glaube, SSIS zu erkennen haben.

Also, was ist die Standard-path, um SSIS verwenden, um dieses Problem zu lösen?

Sie laden diese im internationalen Format (56,99 anstelle von 56,99). Du musst das als 56,99 für SQL server laden, um es als solches zu erkennen. Nehmen Sie den REPLACE(Value, ".", ",") Und haben Sie einfach den Code:

(DT_NUMERIC,4,2)(Value)

Behandle die Formatierung auf der Applikationsseite, nicht auf der dataseite. Das Komma ist ein reservierter Operator in SQL server und man kann diese Tatsache nicht ändern.

 BULK INSERT myTable FROM 'c:\csvtest1.txt' WITH ( FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' ) 

csvtest1.txt

 1|1.25 2|23.56 3|58.99 

Hast du SSIS nicht ganz benutzt, aber kannst du nicht die regionalen Einstellungen auf die File Source setzen oder zumindest den Dezimaltrenner einstellen?

Können Sie Ihre SSIS-Quellspalte ändern, um im richtigen datatyp zu sein?

Wenn du die Kontrolle über die Produktion deiner file hast , würde ich dir vorschlagen, Werte ohne irgendeine Dezimal- oder Tausend-Trennung zu formatieren: In diesem Fall habe ich eine file mit Werten:

 1|125 2|2356 3|5899 

und dann eine Division um 100 beim Importieren der data anwenden. Während es den Vorteil hat, kulturunabhängig zu sein, hat es natürlich einige Nachteile:
1) Zunächst einmal ist es nicht möglich, dieses Format der file aufzuerlegen.
2) Es wird davon ausgegangen, dass alle numerischen Werte entsprechend formatiert werden, in diesem Fall wird jeder Wert mit 100 multipliziert; Dies kann ein Problem sein, wenn man Werte aus Ländern mit unterschiedlichen Dezimalstellen mischen muss (viele haben zwei Dezimalstellen, aber einige haben Null Dezimalstellen).
3) Es kann schwerwiegende Auswirkungen auf andere Routinen, vielleicht aus Ihrer Kontrolle
Daher kann dies wirklich eine Option sein, wenn Sie die vollständige Kontrolle über die CSV-file haben.