2010-05-19 8 views
8

Ich habe ein SSIS-Paket mit einem Datenfluss, der eine ADO.NET-Datenquelle (nur eine kleine Tabelle), führt eine Select * -Abfrage, und gibt die Abfrageergebnisse in eine flache Datei (Ich habe auch versucht, nur die ganze Tabelle und keine SQL-Select verwenden).Wie bekomme ich SSIS-Datenfluss, um '0.00' in eine flache Datei zu setzen?

Das Problem ist, dass die Datenquelle eine Spalte zieht, die ein Money-Datentyp ist, und wenn der Wert nicht Null ist, kommt es in der Textdatei flach (wie '123.45'), aber wenn der Wert Null ist Es erscheint in der Zieldatei als '.00'. Ich muss wissen, wie man die führende Null in die flache Datei zurückbringt.

Ich habe verschiedene Datentypen für die Ausgabe (in der Flat File Connection Manager) versucht, einschließlich Währung und Zeichenfolge, aber dies scheint keine Auswirkungen zu haben.

ich eine Case-Anweisung in meiner select versucht haben, wie folgt aus:

CASE WHEN columnValue = 0 THEN 
    '0.00' 
    ELSE 
     columnValue 
    END 

(noch ergibt‘, 00')

Ich habe so an, dass Variationen versucht:

CASE WHEN columnValue = 0 THEN 
    convert(decimal(12,2), '0.00') 
ELSE 
    convert(decimal(12,2), columnValue) 
END 

(Ergebnisse immer noch in‘.00')

und:

CASE WHEN columnValue = 0 THEN 
    convert(money, '0.00') 
ELSE 
    convert(money, columnValue) 
END 

(Ergebnisse in‘,0000000000000000000 ')

Diese dumme kleine Problem ist, töte mich. Kann mir jemand sagen, wie man eine Null-Money-Datentyp-Datenbank-Wert in eine flache Datei als '0,00' bekommen?

+0

ich die Ursache für dieses Problem wissen, würde gerne - ich nicht wirklich bin angenehm mit dem Abgeleiteten Spaltenhack. – PeterX

Antwort

9

Können Sie eine abgeleitete Spalte verwenden, um das Format des Werts zu ändern? Hast du das versucht?

+0

Das ist eine großartige Idee! Lass es mich mal ausprobieren ... – theog

+0

Okay, nach ein bisschen Wrestling (um einen numerischen in einen String zu konvertieren), hat das funktioniert. Danke Soo! – theog

8

Ich hatte genau das gleiche Problem, und soo's Antwort funktionierte für mich. Ich habe meine Daten in eine abgeleitete Spaltenumwandlung (in der Toolbox Datenflussumwandlung) gesendet. Ich habe die abgeleitete Spalte als neue Spalte vom Datentyp Unicode String ([DT_WSTR]) hinzugefügt und den folgenden Ausdruck verwendet:

Preis < 1? "0" + (DT_WSTR, 6) Preis: (DT_WSTR, 6) Preis

Ich hoffe das hilft!

+0

Danke user346389 ... die Einfügung der seltsamen SSIS-abgeleiteten Spaltenausdrucksyntax war hilfreich. – theog

1

Da Sie in eine Textdatei exportieren, exportieren Sie einfach Daten vorformatiert.

Sie können es in der Abfrage tun oder erstellen Sie eine abgeleitete Spalte, was auch immer Sie bequemer sind.

Ich entschied mich, die Spalte 15 Zeichen breit zu machen. Wenn Sie in ein System importieren, das Zahlen erwartet, sollten diese Nullen ignoriert werden. Warum also nicht einfach die Feldlänge standardisieren?

Eine einfache Lösung in SQL ist wie folgt:

select 
    cast(0.00 as money) as col1 
    ,cast(0.00 as numeric(18,2)) as col2 
    ,right('000000000000000' + cast(0.00 as varchar(10)), 15) as col3 
    go 

col1     col2     col3 
--------------------- -------------------- --------------- 
       .0000     .00 000000000000.00 

einfach ersetzen '0.00' mit Spaltennamen und vergessen Sie nicht die FROM table_name hinzuzufügen, etc ..

2

verwendete ich den erweiterten Editor die Spalte double-precision float-decimal zu ändern, und dann setzen die Scale bis 2:

enter image description here

Verwandte Themen