web-dev-qa-db-fra.com

Comment convertir un nombre en chaîne et le transmettre en tant qu'argument à la tâche d'exécution de processus?

J'utilise Execute Process task dans SSIS 2008 R2. J'ai une variable idVar qui est de type de données Int32 . Je dois passer cette variable à la propriété Arguments de la tâche pour que le processus exécutable puisse prendre cette variable en argument. J'utilise expression pour assigner @idVar à Arguments.

Maintenant, le système dit que je dois convertir Int en String. J'ai donc utilisé l'expression suivante dans le générateur d'expression.

(DT_STR, 10, 1252) @[User::IdVar] 

Cela donne l'erreur suivante: 

Expression cannot be evaluated.

Additional information:
The expression "(DT_STR, 10, 1252) @[User:IdVar]" has a result type of "DT_STR", 
which cannot be converted to a supported type.

(Microsoft.DataTransformationServices.Controls)

Quelle est la bonne façon de transtyper le nombre en chaîne?

Error

9
Sheen

Cause du problème:

La propriété Arguments dans Execute Process Task disponible dans l'onglet Flow Flow attend une valeur de type de données DT_WSTR et non DT_STR.

Package SSIS 2008 R2 illustrant le problème et le correctif:

Créez un package SSIS dans Business Intelligence Development Studio (BIDS) 2008 R2 et nommez-le ainsi: SO_13177007.dtsx. Créez une variable de package avec les informations suivantes.

Name   Scope        Data Type  Value
------ ------------ ---------- -----
IdVar  SO_13177007  Int32      123

Variables pane

Faites glisser une tâche Execute Process Task sur l’onglet Control Flow et nommez-la comme argument Pass.

Control Flow tab

Double-cliquez sur la tâche Execute Process pour ouvrir le Execute Process Task Editor. Cliquez sur la page Expressions, puis sur le bouton Ellipsis en regard de la propriété Expressions pour afficher le Property Expression Editor.

Execute Process Task Editor

Dans l'éditeur d'expressions Property, sélectionnez la propriété Arguments et cliquez sur le bouton Ellipsis en regard de la propriété pour ouvrir le Expression Builder.

Property Expression Editor

Sur le Expression Builder, entrez l'expression suivante et cliquez sur Evaluate Expression. Cette expression tente de convertir la valeur entière de la variable IdVar en type de données chaîne.

(DT_STR, 10, 1252) @[User::IdVar]

Expression Builder - DT_STR

Cliquez sur Evaluate Expression pour afficher le message d'erreur suivant, car la propriété Arguments sur Execute Process Task attend une valeur de type de données DT_WSTR.

Integer to ANSI string conversion error

Pour résoudre le problème, mettez à jour l'expression comme indiqué ci-dessous pour convertir la valeur entière en type de données DT_WSTR. Cliquez sur Evaluate Expression pour afficher la valeur dans la zone de texte Evaluated value.

(DT_WSTR, 10) @[User::IdVar]

Expression Builder - DT_WSTR

Références:

Pour comprendre les différences entre les types de données DT_STR et DT_WSTR dans SSIS, consultez la documentation Types de données Integration Services sur MSDN. Voici les citations de la documentation sur ces deux types de données de chaîne.

DT_STR

Chaîne de caractères ANSI/MBCS terminée par un zéro, d'une longueur maximale de 8 000 caractères. (Si une valeur de colonne contient des terminateurs null supplémentaires, la chaîne sera tronquée à l'occurrence du premier null.)

DT_WSTR

Chaîne de caractères Unicode à zéro terminal d'une longueur maximale de 4 000 caractères. (Si une valeur de colonne contient des terminateurs null supplémentaires, la chaîne sera tronquée à l'occurrence du premier null.)

30
user756519

Expression: "Total Count:" + (DT_WSTR, 11) @ [User :: int32Value]

pour Int32 - (-2 147 483 648 à 2 147 483 647)

1
Klaus Mueller

Expression: "Total Count:" + (DT_WSTR, 5) @ [Utilisateur :: Cnt]

0
Lori Kent