提问人:Aaron Silverman 提问时间:10/9/2008 最后编辑:Aaron Silverman 更新时间:4/4/2014 访问量:8943
如何修复在命令行中传递变量时DTSX优先约束评估错误?
How to fix the DTSX precedence constraint evaluation error while passing variable in command line?
问:
我有一个 dtsx 包,其中包含一个优先级约束,用于评估表达式和约束。约束是 “success”,表达式是 “@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 上运行良好,并且微软的文档声称 ==(直觉地)返回一个布尔值,这让我非常困惑。我也试过在我的命令中用双引号将 3 括起来,但没有运气,现在我没有想法了。
有人知道发生了什么吗?
答:
不确定它是否导致了问题,但您正在使用一种稍微奇怪的语法来设置变量值,请尝试
dtexec ... /SET \Package.Variables[User::myVariable].Value;3
注意我使用的是 ,而不是 . 是在线丛书推荐的官方方式。也许语法也恰好有效,但更改了变量类型。.Value
.Properties[Value]
.Value
.Properties[Value]
对不起,我花了这么长时间才回到这个线程!但是做到了。谢谢!(DT_I4)@[User::myVariable] == 3
这似乎是dtexec.exe初始版本中的一个错误。我的开发环境中安装了 9.00.3042.00 版本,就像 SQL Server 2005 SP2 一样。我们有第二台测试计算机,版本为 9.00.1399.06 。我看到此故障的唯一位置是在测试盒上。我的开发箱运行完成。我在我的布尔变量中添加了一个显式类型转换 (DT_BOOL),该变量是我的表达式的一部分,错误消失了。
还有.上面的值注释不正确。它应该是.Properties[Value] , '因为变量的 Value 只是全局变量属性集合中的一个项目。这不是 C# 或 VB.net 语法。这是 SSIS 语法。
似乎是 ssis 中的一个错误,因为您通过命令行传入的值不会自动转换为配置变量的类型。SSIS 似乎将通过 cmd 行传入的值视为字符串,这在运行时会导致问题。将变量更改为字符串并对其进行比较,或使用 (DT_I4) 在表达式中强制转换。
这绝对是 dtexec 中的一个错误 - 我遇到了类似的问题(通过 dtexec 命令行上的 /set 命令设置整数值),在包执行中进一步抱怨(输出)变量在从存储过程返回时类型错误。
省略该值的集合(无论如何都将其设置为零)修复了包执行错误。不确定如果你真的需要这个值,你会怎么做 - 它们似乎可以很好地作为输入参数,只是当你想将它们用作输出参数并且它们不是字符串时,它们就搞砸了。
下一个:Python 字典更新方法
评论