如何使用int数据类型定义SSIS For Loop的Eval求值表达式?
SSIS表达式报错「Cannot convert System.Boolean to System.String」解决方案
核心原因
你编写的@[User::varCount] == 0表达式本身逻辑完全正确,返回的是布尔类型结果,报错是因为你把该表达式填写到了SSIS中要求返回字符串类型的配置字段中,不是表达式比较逻辑的问题。
分场景解决方案
- 如果是在For循环容器中配置终止条件:
确认你将表达式填写到了「EvalExpression(求值表达式)」输入框中,该字段本身要求返回布尔值,填对位置后报错会直接消失。不要将终止条件表达式填写到「AssignExpression(赋值表达式)」区域,该区域是用来给变量赋值的,如果对应变量是字符串类型就会触发转换错误。 - 如果是在**优先约束(任务间连线的条件判断)**中使用:
打开优先约束编辑器,确认「求值运算」下拉框选择的是「表达式」或「表达式和约束」,该场景下的表达式输入框默认接受布尔返回值,填写后不会报错。 - 如果确实需要将布尔判断结果存储为字符串:
对返回的布尔值做显式类型转换即可,修改表达式为:(DT_WSTR,5)(@[User::varCount] == 0)
快速验证方法
你可以新建一个布尔类型的SSIS变量,将它的表达式设置为@[User::varCount] == 0,点击表达式窗口的「计算」按钮,就能看到该表达式可以正常返回True/False结果,确认表达式本身无问题后,循环终止条件也可以直接引用这个布尔变量,完全规避类型转换报错。
内容的提问来源于stack exchange,提问作者manstrocity
相关产品推荐
相关产品推荐

