基于数组变量的条件拆分

时间:2011-11-25 20:53:14

标签: sql-server-2008 ssis comparison

我需要类似T-SQL IN语句的东西来根据数组变量(或类似的东西)过滤条件分割中的记录

我需要有一个可以过滤列的项目列表。

2 个答案:

答案 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运算符。而且没有类似的运营商。由于没有这样的运算符,您不能使用内置表达式和内置条件分割来实现。但您可以执行以下操作之一:

  • 使用脚本转换检查特定列是否包含在变量数组中,如果包含,则添加值为1的附加列(标志),否则为0;然后在脚本转换中添加的此标志上使用条件性拆分,或
  • 最好将变量放在数据库表中,然后使用Lookup或Merge Join来检查行是否存在