我需要类似T-SQL IN语句的东西来根据数组变量(或类似的东西)过滤条件分割中的记录
我需要有一个可以过滤列的项目列表。
答案 0 :(得分:3)
正如Filip所指出的那样,表达式语言中没有IN运算符。我确实提出了一些选择,因为我觉得这听起来像是一个有趣的问题。
我的长篇分析在我的博客上:Filter list in SSIS
如果您可以将值列表转换为分隔字符串,则可以使用FINDSTRING
和当前值来确定它是否在列表中。这为我的测试场景提供了最佳吞吐量。 (FINDSTRING(@[User::MyListStr], [MyColumn],1)) > 0
我曾假设在脚本任务中使用List来确定成员资格会提供最佳性能,但我错了。 Row.IsInList = MyListObj.Contains(Row.MyColumn);
我提出的第三种方法是将列表转储到缓存连接管理器中,然后在查找任务中使用它。我认为这是最容易概念化和维护的,但缺乏性能。
对于这个问题域,FINDSTRING方法是最有效的,相当大的余地。其他三种方法一致地平均每毫秒每行7行的吞吐量。我发现有趣的是FINDSTRING方法的标准偏差波动很大。虽然此框较旧且较慢,但在程序包执行期间没有进行大量活动。
答案 1 :(得分:0)
SSIS expression operators中没有IN运算符。而且没有类似的运营商。由于没有这样的运算符,您不能使用内置表达式和内置条件分割来实现。但您可以执行以下操作之一: