2017-06-12 3 views
2

Tabelle:SSIS 2008 R2: ROUND der Schwimmer Spalte

create table float_dt_test 
(
    cola float, 
    colb float 
); 

Insertion:

insert into float_dt_test values(57,999.857894736842); 
insert into float_dt_test values(0.225,999.99); 

Ich möchte mit SSIS angegebenen Daten in .txt Datei exportieren.

Ich möchte die Werte Runde 6.

Erwartete Ausgabe in txt-Datei exportieren:

Cola     Colb 
------------------------------------------- 
57      999.857895 
0.225     999.99 

für die ich folgende Abfrage geschrieben haben:

SELECT ROUND(Cola,6) as cola, 
     ROUND(Colb,6) as colb 
FROM float_dt_test; 

Aber nach exportiert zu werden Datei sieht wie aus:

Cola     Colb 
------------------------------------------- 
57      999.85789499999998 
0.22500000000000001  999.99000000000001 

Antwort

4

Das Runden der Werte ändert nicht die interne Darstellung.

nach dem Runden, umwandeln in eine Dezimalzahl:

SELECT CONVERT(DECIMAL(10, 6), ROUND(Cola, 6)) as cola, 
     CONVERT(DECIMAL(10, 6), ROUND(Colb, 6)) as colb 
FROM float_dt_test; 

Eigentlich ist die ROUND() nun überflüssig ist. Es zu belassen, verursacht keinen Schaden, weil es die Operationen explizit macht.

0

Sie können eine Datenkonvertierung Transformation unter Verwendung der direkt in SSIS tun: enter image description here

+0

Es ist keine gute Idee. Weil er die Daten auch runden muss. –

+0

Ein guter Punkt, er muss möglicherweise vor der Datenkonvertierung die Rundung mit einer Transformation für abgeleitete Spalten durchführen – Jayvee

1

In der DataFlow Task können Sie zwei mit den folgenden Ausdrücken derived columns von SSIS-Toolbox hinzufügen:

(DT_NUMERIC,10,6)ROUND([Cola],6) 

(DT_NUMERIC,10,6)ROUND([Colb],6) 

und Karte der zwei abgeleitete Spalten zum Flat-File-Ziel.