代码之家  ›  专栏  ›  技术社区  ›  Aaron Silverman

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

  •  4
  • Aaron Silverman  · 技术社区  · 16 年前

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

    命令:

    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文档声明==(直觉地)返回布尔值,这让我非常困惑。我也尝试过在我的命令中用双引号括住3,但运气不好,现在我已经没有主意了。

    有人知道发生了什么吗?

    5 回复  |  直到 11 年前
        1
  •  3
  •   Aaron Silverman    13 年前

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

        2
  •  2
  •   George S Patton George S Patton    16 年前

    这肯定是dtexec中的一个bug—我也遇到了类似的问题(通过dtexec命令行上的/set命令设置一个整数值),这进一步抱怨了在包执行中,从存储过程返回的(output)变量的类型错误。

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

        3
  •  1
  •   Michael Entin    16 年前

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

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

    注意,我正在使用 .Value 而不是 .Properties[Value] . 价值 是网上图书推荐的官方方式。也许是 语法也会起作用,但会更改变量类型。

        4
  •  0
  •   Isaac Isaac    16 年前

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

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

        5
  •  0
  •   Jobo    16 年前

    在ssis中似乎是一个bug,因为您通过命令行传入的值没有自动转换为配置变量的类型。SSI似乎将通过cmd行传入的值视为字符串,这会在运行时引起问题。将变量更改为字符串并对其进行比较,或者使用(DT_I4)强制转换表达式。