Как указал Филип, в языке выражений нет оператора IN.Я действительно предложил некоторые варианты, хотя, как мне показалось, это звучало как интересная проблема.
Мой длинный анализ находится в моем блоге: Список фильтров в SSIS
Условное разделение
Если вы можете преобразовать свой список значений в строку с разделителями, то вы можете использовать FINDSTRING
и текущее значение, чтобы определить, находится ли он в списке.Это обеспечило лучшую пропускную способность для моего сценария тестирования.(FINDSTRING(@[User::MyListStr], [MyColumn],1)) > 0
Задача сценария
Я предполагал, что использование списка в задаче сценария для определения членства обеспечит наилучшую производительность, но я ошибся.Row.IsInList = MyListObj.Contains(Row.MyColumn);
Диспетчер соединений просмотра / кэширования
Третий подход, который я предложил, - это выгрузка списка в диспетчер кэшированных соединений, а затем использование его в задаче поиска.Я думал, что это было проще всего концептуализировать и поддерживать, но производительности не хватало.
Заключение
Для этой проблемной области подход FINDSTRING был наиболее эффективным, со значительным отрывом.Три других подхода последовательно усредняли пропускную способность в пределах 7 строк на миллисекунду друг от друга.Мне было интересно, что стандартное отклонение подхода FINDSTRING сильно колебалось.Несмотря на то, что этот блок старше и медленнее, во время выполнения пакета не было значительного количества действий.