如何在命令行中传递变量时修复DTSX优先约束评估错误?

时间:2008-10-08 16:00:49

标签: variables command-line ssis

我有一个带有优先约束的dtsx包,用于计算表达式和约束。约束是“成功”,表达式是“@myVariable”== 3. myVariable是一个int32,当在Visual Studio的设计GUI中设置时,包执行正常。还有另外两个路径可以检查值是1还是2。

但是,当我尝试从命令行运行包并为我的变量传入一个值时,它会错误地声明表达式不会计算为布尔值!

命令:

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

错误:

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

从GUI运行良好的事实和microsofts文档声称==(intuiatively)返回布尔值让我非常困惑。我也尝试用我的命令用双引号围绕3,没有运气,现在我没有想法。

任何人都知道发生了什么事?

5 个答案:

答案 0 :(得分:3)

抱歉我花了这么长时间才回到这个帖子!但是(DT_I4)@[User::myVariable] == 3做了伎俩。谢谢!

答案 1 :(得分:2)

这绝对是dtexec中的一个错误 - 我遇到了类似的问题(通过dtexec命令行上的/ set命令设置一个整数值),在程序包执行中进一步抱怨,(输出)变量在返回时类型错误来自存储过程。

省略该值的集合(无论如何将其设置为零)修复了包执行错误。如果你真的需要这个值,不确定你会做什么 - 它们似乎可以作为输入参数正常工作,当你想将它们用作输出参数并且它们不是字符串时,它们会搞砸。

答案 2 :(得分:1)

不确定是否会导致问题,但您使用稍微奇怪的语法来设置变量值,请尝试

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

注意我使用的是.Value,而不是.Properties[Value].Value是联机丛书推荐的官方方式。也许.Properties[Value]语法也可以正常工作,但会更改变量类型。

答案 3 :(得分:0)

这似乎是dtexec.exe初始版本中的一个错误。我有版本9.00.3042.00,就像SQL Server 2005 SP2,安装在我的dev enviro中。我们有第二台测试机器,版本为9.00.1399.06。我看到这个失败的唯一地方是在测试盒上。我的开发框运行完成。我在我的布尔变量中添加了一个显式类型转换(DT_BOOL),这是我的表达式的一部分,错误就消失了。

上面的.Value评论也是错误的。它应该是.Properties [Value],'因为变量的值只是全局变量属性集合中的一个项。这不是C#或VB.net语法。这是SSIS语法。

答案 4 :(得分:0)

似乎是ssis中的错误,因为通过命令行传入的值不会自动转换为配置变量的类型。 SSIS似乎将通过cmd行传入的值视为字符串,这会在运行时导致问题。将变量更改为字符串并对其进行比较,或使用(DT_I4)在表达式中进行强制转换。