2009-02-16 12 views
13

Ich habe ein SSIS-Paket zum Laden von Daten; Wie Sie sich vielleicht erinnern, gibt es Flags, die in Datendateien als Y/N char (1) sind, wenn ich versuche, sie als Bit-Flags in SQL Server zu laden. Ich spezifiziere die Spalten in der Datendatei als String [DT_STR] und ich habe eine Datenkonvertierungsaufgabe, um sie in Booleans zu konvertieren, basierend auf dem folgenden Ausdruck (Ich erhielt den gleichen Konvertierungsfehler nur mit DT_BOOL, obwohl SSIS mich bat zu sagen welche Werte sie als boolean berücksichtigen sollten):SSIS Konvertieren eines char in ein boolesches/Bit

[ColumnName] == "Y" ? (DT_BOOL)1 : (DT_BOOL)0 

das Paket Lauf einen Fehler gibt und sagt mir Invalid character value for cast specification und The value could not be converted because of a potential loss of data auf dem tatsächlichen Import SQL Server (über eine OLE DB-Ziel).

Was fehlt mir hier um es richtig zu konvertieren?

+0

Ich habe versucht, etwas * unglaublich * ähnlich zu tun, aber ich kann nirgendwo in der Datenkonvertierung finden, wo es zu tun ist. Wo definierst du das? –

+1

Ich glaube, ich habe es gefunden - es ist eigentlich die Transformation der abgeleiteten Spalte. –

Antwort

11

Ich konnte es lösen, indem eine abgeleitete Spalte und stattdessen die char-Spalten zu ersetzen, neue Spalten auf Art von DT_BOOL wie so erstellen:

[Recycled] == "Y" ? True : False 
+1

Entschuldigung, ich missverstanden, Sie können keine Spalte in SSIS mit einer Spalte eines anderen Typs ersetzen, Sie müssen immer neue Spalten hinzufügen. –

+1

Obwohl in der Konvertierungsaufgabe können Sie eine andere Spalte mit dem gleichen Namen machen, aber meiner Erfahrung nach, nicht alle Komponenten später in der Pipeline wird den voll qualifizierten Namen als component.column anzeigen, so dass es ärgerlich und gefährlich ist. –

+0

Richtig - ich fand das auf die harte Tour ;-) –

17

Versuchen Sie folgendes:

(DT_BOOL)([ColumnName] == "Y" ? 1 : 0) 

Dies hat auch den Vorteil, automatisch korrekt den Datentyp der abgeleiteten Spalte Einstellung.

0

Ich hatte das gleiche Problem mit

(DT_BOOL) ([Spaltenname] == „Y“ 1: 0)

und ich konnte es nur durch die Aufnahme des „(DT_BOOL)“ Teil aus dem Ausdruck und setzen die Aufgabe, an der Arbeit wandeln Sie es in einen booleschen Wert auf den "Datentyp" Teil um, indem Sie "Boolean" auswählen [DT_BOOL] Keine Probleme danach.