Необходимо объединить таблицы сервера Oracle и SQL в исходном коде oledb без использования связанного сервера. - PullRequest
0 голосов
/ 30 октября 2019

Мой пакет ssis имеет источник oledb, который соединяет сервер oracle и sql для получения исходных данных и загружает их в пункт назначения oledb сервера sql. Ранее для этой цели мы использовали связанный сервер, но мы больше не можем использовать связанный сервер.

Поэтому я беру данные с сервера sql и хочу вернуть их в предложение in запроса oracle, которое я храню какsql команда oledb source.

Я попытался выполнить синтаксический анализ переменной типа объекта с сервера sql и поместить ее в предложение oracle in in в источнике oledb, но я получаю сообщение об ошибке, что oracle не может содержать более 1000 литералов в операторе in. Поэтому в основном я думаю, что должен сделать что-то вроде этого:

select * from oracle.db, где id in (выберите id из sqlserver.db).

Поскольку я не могу использовать связанный сервер, поэтому яЯ подумал, что у меня может быть временная таблица, которую можно использовать во всем пакете.

Я попробовал другой способ использования объединения слиянием в ssis. но мой исходный набор данных действительно большой, и объединение слиянием возвращает меньше строк, чем expecetd. Я сильно застрял в этой точке. Я попробовал номер, если кажется, что что-то не работает.

Может кто-нибудь, пожалуйста, помогите. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 30 октября 2019

Несколько вариантов, чтобы попробовать.

Поиск:

Мой первый инстинкт был Lookup Task, но это может быть не лучшим решением в зависимости от размера ваших наборов данных, так как всеЗаписи из обеих таблиц должны передаваться по проводам и храниться в памяти на сервере SSIS. Но если вы смогли получить Merge Join, то Lookup также должен работать, но он может быть медленным.

Установите OLE DB Source для извлечения данных Oracle без WHEREпункт. Установите Lookup, чтобы извлечь столбец id из таблицы SQL Server. На вкладке General в Lookup в разделе Specify how to handle rows with no matching entries выберите Redirect rows to no-match output.

Результатом Lookup будут только строки Oracle, которые нашли совпадающую строку в вашем SQL Serverзапрос.

Рабочая таблица на сервере Oracle

Если у вас есть возможность создать таблицу в базе данных Oracle, вы можете создать Data Flow Task для передачи результатовваш запрос SQL Server в рабочую таблицу на коробке Oracle. Затем в последующем Data Flow просто создайте запрос Oracle, чтобы использовать эту рабочую таблицу в качестве фильтра.

Возможно, после этого добавьте Execute SQL Task для усечения этой рабочей таблицы.

Несмотря на то, что для этого требуется доступ на запись в Oracle, преимущество заключается в том, что он загружает тяжелую работу запроса вкомпьютер базы данных, и тянет только те строки, которые вам нужны, по проводам.

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