4

我有一个带有优先约束的 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 上运行良好并且微软文档声称 == (直观地)返回布尔值的事实让我非常困惑。我也试过在我的命令中用双引号将 3 括起来,但没有运气,现在我没有主意了。

有人知道发生了什么吗?

4

5 回答 5

3

对不起,我花了这么长时间才回到这个线程!但(DT_I4)@[User::myVariable] == 3成功了。谢谢!

于 2008-10-21T13:50:44.090 回答
2

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

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

于 2009-05-22T05:45:58.813 回答
1

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

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

注意我使用的是.Value, 而不是.Properties[Value]. .Value是Books Online推荐的官方方式。也许.Properties[Value]语法也恰好起作用,但改变了变量类型。

于 2008-10-12T07:16:22.923 回答
0

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

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

于 2008-12-23T03:04:24.910 回答
0

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

于 2009-01-06T22:07:27.920 回答