Таблицы назначения выглядят следующим образом:
Исходная таблица выглядит так:
Клиент
CustomerId Имя Фамилия Адрес электронной почты1 Address2 Почтовый индекс города
Таблица Person в пункте назначения является базовой таблицей (которая позже будет унаследована новой таблицей клиентов). Итак, я пытаюсь экспортировать строку из одной таблицы и заполнить 3 таблицы в месте назначения.
Мне удалось сделать это следующим образом:
- Получить записи из исходной таблицы (Клиент)
- Создать пустое поле AddressId
- Заполнить таблицу адресов с помощью командной задачи OLE DB (она вызывает хранимую процедуру, которая возвращает SCOPE_IDENTITY(), сопоставленную с полем AddressId)
- Повторите шаг 3 для заполнения таблицы Person (и получения PersonId
- Заполните таблицу перекрестных ссылок PersonAddress, используя поля PersonId и AddressId.
Скриншот этого пакета ниже.
Самая большая проблема с этим подходом заключается в том, что задача команды OLE DB вставляет строку за строкой, что делает весь пакет чрезвычайно медленным. Можно ли добиться того же, но используя быструю загрузку?
Я могу сделать это с помощью командной задачи OLE DB, которая вызывает хранимую процедуру, а затем
INSERT / SELECT
), обновив до дополнительных ключевых столбцов в промежуточной таблице. Не возитесь со всеми игрушками в SSIS, они медленные и переоценены. Просто импортируйте в промежуточную таблицу и запустите SQL. ТакжеPersonAddress
иAddress
имеют один и тот же первичный ключ. Зачем их разделять? - person Nick.McDermaid   schedule 19.02.2015