Помимо создания связанного сервера на исходном сервере. Есть два подхода к SSIS.
- Создайте временную промежуточную таблицу на конечном сервере, скопируйте все записи из источника в эту временную таблицу и используйте фильтр
where exists
. - В потоке данных создайте преобразование «Уточняющий запрос», которое для набора поиска получает идентификаторы из таблицы сервера назначения. Затем приступайте только к соответствующим записям. По соображениям производительности вы можете использовать Поиск в режиме полного или частичного кэша; только тестирование производительности может сказать, какой режим лучше.
Рекомендации Хади с Linked Server хороши и будут работать. Преимущество чистого подхода SSIS состоит в том, что он не вносит никаких изменений в исходный сервер, вся конфигурация соединения находится внутри SSIS. В некоторых случаях это может быть полезным. Его недостаток - производительность может быть хуже, чем у Linked Server.
Если необходимо передать как можно меньше строк из источника, наиболее простым способом является подход с использованием связанного сервера. В противном случае можно создать таблицу на исходном сервере (это может быть даже глобальная временная таблица ##, созданная в задаче пакета служб SSIS) и скопировать идентификаторы фильтров с целевого сервера. Временная таблица должна быть global с ##, поскольку она будет заполнена в одной задаче и использована в последующих. Затем отфильтруйте записи с помощью предложения EXISTS
на исходном сервере.