2009-02-16 11 views
13

J'ai un package SSIS pour charger les données; Comme vous vous en souvenez peut-être, il y a des drapeaux qui sont dans les fichiers de données sous la forme Y/N char (1) lorsque j'essaie de les charger en tant qu'indicateurs de bits dans SQL Server. Je spécifie les colonnes dans le fichier de données comme String [DT_STR] et j'ai une tâche de conversion de données pour les convertir en booléens basés sur l'expression suivante (j'ai reçu la même erreur de conversion en les spécifiant comme DT_BOOL pour commencer, malgré SSIS me demandant de dire quelles sont les valeurs qu'il devrait considérer comme booléen):SSIS Conversion d'un caractère en un booléen/bit

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

Exécution du paquet donne une erreur et me dit Invalid character value for cast specification et The value could not be converted because of a potential loss of data sur l'importation réelle à SQL Server (via une destination OLE DB).

Qu'est-ce qui me manque ici pour le convertir correctement?

+0

Je cherchais à faire quelque chose de * incroyablement * similaire à cela, mais je ne trouve nulle part dans la transformation de conversion de données où le faire. Où est-ce que vous définissez ceci? –

+1

Je crois que je l'ai trouvé - c'est en fait la transformation de la colonne dérivée. –

Répondre

11

j'ai pu le résoudre en utilisant une colonne dérivée et, au lieu de remplacer les colonnes char, ce qui crée de nouvelles colonnes mises à type de DT_BOOL comme ceci:

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

Désolé, j'ai mal compris, vous ne pouvez pas remplacer une colonne dans SSIS avec une colonne d'un type différent, vous devez toujours ajouter de nouvelles colonnes. –

+1

Bien que dans la tâche de conversion, vous puissiez créer une autre colonne avec le même nom, mais dans mon expérience, tous les composants plus tard dans le pipeline afficheront le nom qualifié complet comme composant.colonne, donc c'est ennuyeux et dangereux. –

+0

Bon - je l'ai trouvé à la dure ;-) –

17

Essayez ceci:

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

Cela a aussi l'avantage de fixer automatiquement le type de données de la colonne dérivée correctement.

0

J'ai eu le même problème avec

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

et je ne pouvais le faire fonctionner en enlevant la partie "(DT_BOOL)" de l'expression et de mettre le travail de le convertir en un booléen sur la partie "Data Type" en sélectionnant "Boolean [DT_BOOL]. Pas de problèmes après ça.

Questions connexes