Службы SSIS для копирования данных из одной таблицы в другую, где нет в таблице назначения - PullRequest
1 голос
/ 19 марта 2010

Я нахожусь в процессе создания пакета служб SSIS на сервере (server1), который просматривает данные в базе данных sql на другом сайте (server2) и копирует соответствующие строки по всему.

Требуется оператор SQL:

SELECT *
FROM server2.ordersTable
WHERE
OrderID Not In (SELECT OrderID FROM server1.ordersTable

Выбирает данные с сервера1, которых нет в таблице на сервере2 (на основе идентификатора заказа) Затем мне нужно вставить результат в таблицу на сервере1

Как бы я подошел к этому? Какие компоненты мне нужны и т.д ...?

Ответы [ 3 ]

1 голос
/ 20 марта 2010

Предполагая, что вы можете использовать OPENQUERY или прямое присоединение связанного сервера на server2 к server1 (как в вашем примере или ответе из кода @ schrodinger), это было бы лучшим решением для минимизации данных по проводам.

Но если этого нет, у вас есть два других варианта:

1) Вы можете использовать преобразование потока данных «Уточняющий запрос» в службах SSIS, чтобы проверить запись по существующим идентификаторам OrderID и выдвинуть только новые записи, используя преобразование с условным разделением.

2) Вы можете перенести всю таблицу с Сервера2 во временную таблицу на Сервере1, а затем сравнить на Сервере1, используя вариант размещенного вами кода.

1 голос
/ 10 апреля 2012

Понимая, что это СТАРЫЙ поток ...

Если вы хотите сделать это в SSIS, я бы предложил поток данных с:

  • Два источника данных.
  • Источник A выбирает все данные, которые вы хотите переместить
  • Источник B выбирает ключ из пункта назначения
  • Запуск обоих источников в объединение слиянием, настроенное как левое объединение
  • Запустить результаты объединения в условное разбиение, определить вывод, в котором ключ от источника B равен нулю
  • Запустите соответствующий вывод разбиения в место назначения, которое вставит нужные строки в соответствующую таблицу.

Существует ряд улучшений, которые могут быть сделаны для поддержки дополнительных функций, таких как обработка обновлений и удалений. Существуют также некоторые приемы настройки производительности, которые могут применяться в зависимости от объема данных, одним из самых простых является проверка даты изменения исходных данных по сравнению с последним временем запуска пакета для уменьшения количества записей, выбранных источником A. *

0 голосов
/ 19 марта 2010

вы можете создать связанный сервер для одного из серверов, сначала скажем LinkedServer1 для server1, а затем вы можете использовать OPENQUERY, например:

ВЫБРАТЬ * FROM server2.OrdersTable ГДЕ OrderID НЕ В ( ВЫБЕРИТЕ OrderID FROM OPENQUERY (LinkedServer, 'ВЫБЕРИТЕ OrderID FROM LinkedServer1.OrdersTable) )

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