Прежде всего, относительно того, что вы используете Назначение SQL Server, я предлагаю прочитать следующий ответ от гуру SSIS @billinkc:
Я предоставлю различные методы для достижения этой цели:
(1) Использование преобразования «Уточняющий запрос»
- Вы должны добавитьзадача потока данных, в которой вы добавляете второй инвентарь (устаревший) в качестве источника
- Добавьте преобразование поиска, где вы выбираете первый источник инвентаря в качестве таблицы поиска.
- Сопоставьте таблицу источника и поиска с помощью
ItemCode
столбец - В преобразовании поиска выберите
Redirect rows to no match output
из раскрывающегося списка. - Используйте вывод Lookup no match, чтобы получить нужные строки (не найдено в первомИсточник инвентаря)
Вы можете обратиться по ссылке ниже, она содержит пошаговые руководства.
Полезная ссылка
Старые версии SSIS
Если вы используете старые версии SSIS, вы не найдете раскрывающийся список Redirect rows to no match output
,Вместо этого вы должны перейти к выводу «Ошибка поиска», выбрать опцию Redirect Row
для ситуации No Match
и использовать вывод ошибок для получения нужных строк.
(2) Использование связанных серверов
Во втором списке создайте связанный сервер, чтобы иметь возможность подключиться к первому серверу.Теперь вы можете использовать команду SQL, которая выбирает только строки, не найденные в первом источнике:
SELECT *
FROM Inverntory2
WHERE NOT EXISTS (SELECT 1 FROM <Linked Server>.<database>.<schema>.Inverntory1 Inv1 WHERE Inverntory2.ItemCode = Inv1.ItemCode)
(3) Промежуточная таблица + преобразование MERGE, MERGE JOIN, UNION ALL
В каждой исходной SQL-команде добавьте столбец с фиксированным значением, содержащий идентификатор источника (1,2), например:
SELECT *, 1 as SourceID FROM Inventory
Вы можете объединить оба источника в одном месте назначения, используя одно из перечисленных преобразованийвыше, затем добавьте вторую задачу потока данных, чтобы импортировать отдельные данные из промежуточной таблицы в место назначения на основе столбца ItemCode, например:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY ItemCode ORDER BY SourceID) rn
FROM StagingTable ) s
Where s.rn = 1
Затем он вернет все строки из SourceId =1
и новые строки изSourceId = 2
Чтобы узнать больше о слиянии, объединении слиянием и преобразовании UNION ALL, вы можете обратиться по одной из следующих ссылок:
Примечание: проверьте ответ, предоставленный @ userfl89, он содержит очень подробную информацию об использовании преобразования Merge Join и описывает другой подход, который может помочь,Теперь вы должны проверить, какой подход соответствует вашим потребностям.Удачи