我在For循环容器中设置了数据流任务。只要变量@LastPayment不是正数,就应该执行循环。
@LastPayment是DataType的变量:Boolean,Value = False,EvaluateAsExpression = False,并在Expression中设置以下内容 “选择[继续] FROM [DW_Test]。[dbo]。[测试]”
在我的For循环编辑器中,我的EvalExpression设置为: @ [LastPayment] = “1”
当我运行SSIS包时,循环不会停止,即使SELECT [Continue] FROM [DW_Test]。[dbo]。[Test]在几次迭代后返回0,因此@ [LastPayment] =“1 “经过几次迭代后,这是假的。我不明白为什么ForLoop没有结束。
当我将EvalExpression更改为In my For Loop Editor时 @ [LastPayment] =(DT_BOOL)“TRUE”或@ [LastPayment] =“TRUE”,我得到相同的结果。
当我将EvalExpression更改为我的For循环编辑器为@ [LastPayment] =“0”时 没有生成行。
我的变量定义或EvalExpression有什么问题吗?对此提出任何建议。感谢。
答案 0 :(得分:0)
如果要检查 For循环中的逻辑表达式,则应将其写为@LastPayment<=0
。 Microsoft解释conditional expressions。
答案 1 :(得分:0)
SSIS布尔值的评估与SQL Server Bits的评估不同。测试布尔变量是否为真的方法如下:
@[LastPayment] == true
答案 2 :(得分:0)
只是为了更新我已经解决了这个问题。
在ForLoop进程之前,我添加了一个执行SQL任务来确定ForLoop进程需要经历的MaxLoop并将结果集映射到数据类型为Int32的变量@MaxLoop。
在ForLoop容器中,我添加了一个表达式任务,其表达式为@ Loop = @ Loop + 1. @Loop是数据类型Int32的变量。这是为了计算ForLoop处理的循环次数。
我的ForLoop EvalExpression被修改为@ Loop&lt; @MaxLoop。
感谢所有建议。