Условное разбиение служб SSIS на разные места назначения плоских файлов - PullRequest
0 голосов
/ 01 октября 2019

Я хочу создать пакет служб SSIS с условным разделением, в котором я хочу отправить содержимое в другие файлы на основе следующих условий

Случай 1: Если все значения в столбце A равны 0, отправьте его в FlatFileDestination1
Случай 2: если хотя бы одно значение столбца A отличное от нуля, отправьте его в FlatFileDestination2.

Буду признателен за любые идеи.

Ответы [ 3 ]

0 голосов
/ 02 октября 2019

Я думаю, я бы справился с этим следующим образом:

Добавьте столбец к источнику данных с помощью этого запроса:

;with cte as
(
    --Put your query in here
)

select cte.*
    ,BoolTest = case when ColATest.num >0 then 1 else 0 end 
from cte 
cross apply (select SUM(ABS(ColumnA)) from cte) as ColATest(num)

Это добавит 1 или 0 к каждой строке, которая будетиспользуется в качестве условного значения разделения. 1 будет иметь по крайней мере одну строку с ненулевым значением, а 0 означает, что нет строк без 0.

0 голосов
/ 02 октября 2019

Шаг 1:

выполнить SQL перед потоком данных:

;with cte as
(
    --Put your query in here
)

select Test = SUM(ABS(ColumnA)) from cte) 

Сохраните его в переменную с именем Test (выберите тип данных числа).

Шаг 2: Добавитьвыражение для назначения плоского файла для строки подключения. Убедитесь, что для проверки задержки установлено значение true.

@Test > 0 ? [put in your full path for not 0 here as a string] : [put in your full path for colA =0 here]

Вы должны быть в состоянии оставить поток данных в покое (AKA без условного разделения). По сути, источник прямо к месту назначения, а выражение указывает, где заканчивается файл.

0 голосов
/ 01 октября 2019

Попытка проверить, имеет ли хотя бы одна строка значение в наборе данных, не подходит для условного разбиения. Разделение условий - это разбиение отдельных строк на отдельные места.

Однако вы могли бы добавить дополнительный столбец к исходному набору данных, который подсчитывает количество ненулевых значений:

COUNT(CASE WHEN [Column A] != 1 THEN 1 END) OVER () AS ColumnANonZero

Затем в потоке данных разделите строки, имеющие значение от 0 для ColumnANonZero до FlatFileDestination1 в Условном разделении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...