Ssis 用于循环的SSI不会中断循环

Ssis 用于循环的SSI不会中断循环,ssis,Ssis,我有一个SSIS包,试图在其中使用For循环检查条件web服务响应。我在SSIS内的EvalExpression中有一个条件,我正在循环内的数据流任务中设置该EvalExpression中的一个变量。我还记录了表达式以及表达式中的变量,当EvalExpression变为false时,循环继续进行。有人能解释一下这是为什么吗?或者我怎样才能在每次迭代中得到真正的EvalExpression 这是我的逃避 (@[User::statusMessageLoop] == 1 && @[U

我有一个SSIS包,试图在其中使用For循环检查条件web服务响应。我在SSIS内的EvalExpression中有一个条件,我正在循环内的数据流任务中设置该EvalExpression中的一个变量。我还记录了表达式以及表达式中的变量,当EvalExpression变为false时,循环继续进行。有人能解释一下这是为什么吗?或者我怎样才能在每次迭代中得到真正的EvalExpression

这是我的逃避

(@[User::statusMessageLoop] == 1 && @[User::statusMessageLoopCheck] == 1)
变量User::statusMessageLoopCheck在循环的每次迭代时设置,当我希望它脱离循环时,我将其设置为0

我希望下面的图片有助于解释我的情况,并感谢大家的投入


我假设您正在正确地将XML读入列中,并且您知道如何做到这一点

添加脚本组件并选择转换 添加您的变量,我将其称为读写isTrue 选择列作为“读取输入” 输入脚本 添加以下代码以设置变量

Variables.isTrue = Row.isTrue == true ? 1 : 0;
这是基本的if-then-else逻辑

这是使用SSIS继承工具设置变量的方式

如果这不起作用,也许应该检查以确保正确读取XML

编辑:

您需要一个临时变量来保存测试结果,然后可以在post execute中设置包变量。以下是代码的屏幕截图:

很抱歉。我从你那里学到了这个教训。我通常完全在C中处理所有XML和JSON

注意,bool测试也是在行处理之外声明的


这假设您也只有一行处理。

如何设置循环检查变量?@KeithL-在For循环内的我的数据流任务中,我使用的是一个派生列,在该列中读取XML web服务响应,并根据web服务的状态消息将名为statusMessageIndicator的变量设置为1或0。在这一步之后,我使用zappysys包Set Variable Transform,>Transforms>Set Variable Transform将LoopCheck变量设置为statusMessageIndicator返回的任何值。我也知道这是不需要的额外代码,但我尝试了不同的东西,所以我留下了它。thxI也使用ZappySys,但没有使用该对象。让我给你一个关于如何使用脚本任务的答案。谢谢你的回答。我在这方面运气不好,但也可能是因为我在做这件事。当我提取要再次检查状态的XML列时,我将该列的输出添加到脚本组件中。在脚本组件的“脚本”选项卡下,我将ReadWriteVariables设置为包含我创建的isTrue int变量。在输入列中,我从XML中选择API响应变量。在Input0|u ProcessInputRow类下的编辑脚本中,我有3个变量中的22个变量中的1个。isTrue=Row.OracleResponse==成功| | Row.OracleResponse==错误| | Row.OracleResponse==警告?1 : 0; 当我保存并运行该进程时,我会收到以下错误消息:错误:0xC0047062处于循环API的get ESS作业状态,脚本组件[136]:Microsoft.SqlServer.Dts.Pipeline.ReadWriteVariablesNotAvailableException:为读写访问锁定的变量集合在PostExecute之外不可用。3个@KeithL错误代码中的3个Dts_E_PROCESSINPUTFAILED。组件脚本组件136上的ProcessInput方法在处理输入0 146时失败,错误代码为0x801316。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。您可以添加数据流的图片吗?请参阅下面。。。希望这些能起作用!