SSIS не существует в одном потоке данных

Я пытаюсь добиться следующего в SSIS:

Объединение всех 6 отдельных запросов SQL (источники OLE DB) (назовите этот набор данных A) Набор данных A содержит

id Col A Col B......
1
2
3
4
5
6
7
8

У меня есть еще один исходный SQL-запрос OLE DB (набор данных B), который содержит

id Col A Col B .......
1
2
3
4
10
11
12

Все столбцы Col A, Col B и т. Д. Одинаковы во всех запросах.

Я хочу вернуть объединенный набор данных (UNION ALL) с набором данных B, где идентификаторы в наборе данных B не совпадают с идентификаторами в наборе данных A.

id Col A Col B......
1
2
3
4
5
6
7
8
10
11 
12

Также перед выполнением UNION необходимо выполнить дополнительную работу с набором данных B, чтобы заполнить значения NULL в столбцах.

Я могу достичь этого довольно просто, вставив набор данных A в таблицу, а затем используя эту таблицу в последующем запросе NOT EXISTS или аналогичном запросе, чтобы получить недостающую информацию, а затем объединяясь. В идеале, хотя я бы хотел сделать это за один раз, используя двойную многоадресную рассылку, одна сторона переходила в соответствие "Поиск не найден", а другая - прямо в таблицу назначения.

К сожалению, выходные данные Lookup и No Match возвращают "неправильные" отсутствующие данные, т.е.

5
6
7
8

скорее, чем

10
11
12

это потому, что поиск (набор данных B) и исходные данные (набор данных A) являются "неправильным путем". Я не хочу переписывать набор данных A как запрос Lookup, так есть ли другой способ обойти это, используя другое преобразование или другой метод?

Я экспериментировал с Cache Transform, но, похоже, он не работает в том же потоке данных, что и Lookup Lookup, так как существует конфликт чтения / записи.

Спасибо, Рич.

1 ответ

Решение

Звучит так, как будто вам нужен компонент "Слияние" типа "Fuller Outer Join", а затем своего рода ручное слияние по факту. Если я вас неправильно понял, вы всегда можете добавить условное разбиение после слияния, чтобы отфильтровать, если A равно нулю, если B равно нулю и т. Д.

https://stackru.com/images/f317b00a81f701f22b92d35ce853e0a91e4b97bf.png

Примером "Объединения столбцов" является создание повторяющегося "Id" с этим выражением: "ISNULL(Id_A)? Id_B: Id_A"

Пример для "полного внешнего соединения - слияния":

Другие вопросы по тегам