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 равно нулю и т. Д.
Примером "Объединения столбцов" является создание повторяющегося "Id" с этим выражением: "ISNULL(Id_A)? Id_B: Id_A"