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