2014-07-16 179 views
0

我相信我已经设置了正确的表达式,但它一直进入无限循环。以下是详细信息:SSIS FOR循环进入无限循环

Variables: 
@CD Datetime = @[User::ED] 
@ED datetime = 3/31/2014 
@M12 Datetime = DATEADD("d", 1, DATEADD("m", -12, @[User::ED])) 

For-Loop: 
InitExpression: @CD = @ED 
EvalExpression: @CD > @M12 
AssignExpression: @CD = DATEADD("m", -1, @CD) 

在For循环中是一个执行SQL任务,它将该迭代的@CD值插入到表中。赋值表达式某种程度上不起作用,因此EvalExpression条件永远不会被满足。我错过了什么?

我正在运行SQL Server 2012.谢谢。

+0

@billinkc更新的主要帖子。谢谢 – Meta747

+0

就这样我很清楚。 Variable @ [User :: CD]上有一个表达式,它被分配了@ [User :: ED]的值。然后使用一个Forloop,其中CD初始化为ED,并按月/分递减,直到穿过M12边界 – billinkc

+0

是的,没错。 – Meta747

回答

0

Variable @ [User :: CD]上有一个表达式,它被分配了@ [User :: ED]的值。然后尝试在for循环的上下文中修改@ [User :: CD]的值。这不会像尝试修改for构造之外的迭代器那样引发错误,就像在基于C语言的语言中一样,但从逻辑上讲,这是错误的。

假设SSIS通过将其减1来改变该值。下次需要引用@ [User :: CD]时,它将使用表达式,其表示我的值为真的是 @ [User :: ED]这永远不会改变。

解决方法 - 从您的@ [User :: CD]变量中删除表达式。

+0

谢谢你的解释,解决了这个问题。 – Meta747