2008-10-08 2 views
4

J'ai un paquet dtsx avec une contrainte de précédence qui évalue une expression et une contrainte. La contrainte est "succès" et l'expression est "@myVariable" == 3. myVariable est un int32, et lorsqu'il est défini dans l'interface graphique de Visual Studio, le package s'exécute correctement. Toutefois, lorsque j'essaie d'exécuter le package à partir de la ligne de commande et que vous transmettez une valeur pour ma variable, il déclare une erreur en déclarant que l'expression n'évalue pas la valeur 1 ou 2.Comment réparer l'erreur d'évaluation de la contrainte de précédence DTSX lors du passage de la variable dans la ligne de commande?

à un booléen!

Commande:

dtexec /F "c:myPackage.dtsx" /SET 
\Package.Variables[User::myVariable].Properties[Value];3 

Erreur:

The expression "@myVariable == 1" must evaluate to True or False. 
Change the expression to evaluate to a Boolean value. 

Le fait cela fonctionne très bien de l'interface graphique et que la documentation de Microsofts prétend == (intuiatively) retourne une valeur booléenne m'a très confus. J'ai aussi essayé d'entourer les 3 guillemets dans mon commandement sans aucune chance, et maintenant je n'ai plus d'idées.

Quelqu'un a-t-il une idée de ce qui se passe?

Répondre

3

désolé m'a pris tellement de temps pour revenir à ce sujet! Mais (DT_I4)@[User::myVariable] == 3 a fait l'affaire. Merci!

1

Je ne sais pas si elle cause le problème, mais vous utilisez une syntaxe un peu étrange pour définir la valeur de variable, essayez

dtexec ... /SET \Package.Variables[User::myVariable].Value;3 

Remarque J'utilise .Value, au lieu de .Properties[Value]. .Value est la manière officielle recommandée par la documentation en ligne. Peut-être que la syntaxe .Properties[Value] fonctionne également, mais change le type de variable.

0

Cela semble être un bogue dans la version initiale de dtexec.exe. J'ai la version 9.00.3042.00 qui est comme, SQL Server 2005 SP2, installé dans mon environnement de développement. Nous avons une deuxième machine d'essai qui est sur la version 9.00.1399.06. Le seul endroit où je vois cet échec est sur la boîte de test. Mon dev. la boîte fonctionne jusqu'à la fin. J'ai ajouté une conversion de type explicite (DT_BOOL) à ma variable booléenne qui faisait partie de mes expressions et l'erreur est partie.

Le commentaire .Value ci-dessus est également incorrect. Il est supposé être .Properties [Value], car la valeur d'une variable est simplement un élément de la collection de propriétés de la variable globale. Ce n'est pas la syntaxe C# ou VB.net. C'est la syntaxe SSIS.

0

Cela ressemble à un bogue dans ssis car la valeur que vous transmettez via la ligne de commande n'est pas automatiquement convertie en type de variables de configuration. SSIS semble traiter les valeurs passées via la ligne cmd comme des chaînes, ce qui provoque des problèmes lors de l'exécution. Changez votre variable en une chaîne et faites la comparaison sur celle-ci, ou utilisez le (DT_I4) pour lancer l'expression.

2

C'est un bogue dans dtexec - J'ai eu un problème similaire (définition d'une valeur entière via la commande/set sur une ligne de commande dtexec) qui se plaignait dans l'exécution du paquet. renvoyé d'une procédure stockée.

L'omission de l'ensemble de cette valeur (la définissant de toute façon à zéro) a corrigé l'erreur d'exécution du package. Vous ne savez pas ce que vous feriez si vous aviez vraiment besoin de la valeur - ils semblent fonctionner correctement en tant que paramètres d'entrée, ils se vissent juste quand vous voulez les utiliser comme paramètres de sortie et ce ne sont pas des chaînes.

Questions connexes