Types de données Integration Services dans les expressions
L'évaluateur d'expression utilise des types de données Integration Services. Lorsque des données entrent dans un flux de données d'un package Integration Services, le moteur de flux de données convertit toutes les données de colonne vers un type de données Integration Services et les données de colonne utilisées par une expression ont déjà un type de données Integration Services. Les expressions utilisées dans les transformations de fractionnement conditionnel et de colonne dérivée peuvent référencer des colonnes car elles font partie d'un flux de données qui comprend des données de colonne.
Les expressions peuvent également utiliser des variables. Les variables ont un type de données Variant et l'évaluateur d'expression convertit le type de données d'une variable d'un sous-type Variant vers un type de données Integration Services avant d'évaluer l'expression. Les variables ne peuvent utiliser qu'un sous-ensemble des types de données Integration Services. Par exemple, une variable ne peut pas utiliser un type de données BLOB (Binary Large Object Block).
Pour plus d'informations sur les types de données Integration Services et le mappage des types de données Variant avec des types de données Integration Services, consultez Types de données d'Integration Services.
Les expressions peuvent aussi comprendre des littéraux de chaîne, booléens et numériques. L'évaluateur d'expression convertit toujours les littéraux de chaîne vers le type de données DT_WSTR et les littéraux booléens vers le type de données DT_BOOL. L'évaluateur d'expression interprète toutes les valeurs entre guillemets comme des chaînes. Les littéraux numériques sont convertis vers l'un des types de données Integration Services numériques. Pour plus d'informations sur la conversion des littéraux numériques vers des types de données Integration Services numériques, consultez Littéraux (SSIS).
Notes
Les valeurs booléennes ne sont pas des nombres mais des valeurs logiques. Bien que les valeurs booléennes peuvent apparaître sous la forme de nombres dans certains environnements, elles ne sont pas stockées en tant que tels et divers langages de programmation les représentent de manière différente en tant que valeurs numériques, notamment les méthodes .NET Framework.
Par exemple, les fonctions de conversion disponibles dans Visual Basic convertissent la valeur True en -1 ; en revanche, la méthode System.Convert.ToInt32 du .NET Framework convertit True en +1. Le langage d'expressions Integration Services convertit True en -1.
Pour éviter des erreurs ou des résultats inattendus, n'écrivez pas de code fondé sur des valeurs numériques précises pour les valeurs True et False. Si possible, limitez l'usage de variables booléennes aux valeurs logiques pour lesquelles elles sont conçues.
Configuration requise pour les données utilisées dans les expressions
L'évaluateur d'expression prend en charge tous les types de données Integration Services. Toutefois, selon l'opération ou la fonction, les opérandes et les arguments requièrent certains types de données. L'évaluateur d'expression impose les contraintes suivantes en matière de type de données pour les données utilisées dans les expressions :
Les opérandes utilisés dans les opérations logiques doivent s'évaluer à une valeur booléenne. Par exemple, ColonneA > 1&&ColonneB < 2.
Les opérandes utilisés dans les opérations mathématiques doivent s'évaluer à une valeur numérique. Par exemple, 23,75 * 4.
Les opérandes utilisés dans les opérations de comparaison, telles que les opérations logiques et d'égalité, doivent correspondre à des types de données compatibles.
Par exemple, l'une des expressions de l'exemple suivant utilise le type de données DT_DBTIMESTAMPOFFSET :
(DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"
Le système convertit l'expression (DT_DBDATE)"1999-10-12" en DT_DBTIMESTAMPOFFSET. Cet exemple correspond à TRUE car l'expression convertie devient "1999-10-12 00:00:00.000 +00:00", ce qui n'est pas égal à la valeur de l'autre expression, (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30".
Les arguments transmis aux fonctions mathématiques doivent s'évaluer à un type de données numérique. Selon la fonction ou l'opération, un type de données numérique spécifique peut être requis. Par exemple, la fonction HEX requiert un entier signé ou non signé.
Les arguments transmis aux fonctions de chaîne doivent produire un type de données character : DT_STR ou DT_WSTR. Par exemple, UPPER("fleur"). Certaines fonctions de chaîne, telles que la fonction SUBSTRING, requièrent des arguments entiers supplémentaires pour définir la position de début et la longueur de la chaîne.
Les arguments transmis aux fonctions de date et d'heure doivent s'évaluer à une date valide. Par exemple, DAY(GETDATE()). Certaines fonctions, telles que la fonction DATEADD, requièrent un argument entier supplémentaire pour définir le nombre de jours qu'elles ajoutent à une date.
Les opérations qui combinent un entier non signé (8 bits) et un entier signé nécessitent une conversion explicite afin de clarifier le format du résultat. Pour plus d'informations, consultez Cast (Expression SSIS) : conversion de types de données SSIS.
Les résultats de nombreuses opérations et fonctions ont des types de données prédéterminés. Il peut s'agir du type de données de l'argument ou du type de données vers lequel l'évaluateur d'expression convertit le résultat. Par exemple, le résultat d'un opérateur logique OU (||) est toujours booléen, le résultat de la fonction ABS a le type de données numérique de l'argument et le résultat de la multiplication est du plus petit type de données numérique pouvant contenir ce résultat sans perte de données. Pour plus d'informations sur les types de données des résultats, consultez Opérateurs (Expression SSIS) et Fonctions de chaînes et autres fonctions (Expression SSIS).
Ressources externes
Publication technique, SSIS Expression Cheat Sheet, sur le site pragmaticworks.com
Article technique intitulé SSIS Expression Examples sur le site social.technet.microsoft.com