Объединение двух таблиц с SSIS в одну таблицу назначения - PullRequest
0 голосов
/ 11 мая 2010

Я новичок в SSIS, поэтому, пожалуйста, потерпите меня.

Я создал проект служб Integration Services для SQL Server 2008 для импорта данных из старой базы данных в новую. Одна из вещей, которые мне нужно сделать, это импортировать данные из двух старых исходных таблиц в одну новую таблицу назначения.

Каков наилучший способ сделать это?

Я легко вижу нужные результаты с помощью простого запроса внутреннего соединения с использованием tsql, но мне не повезло с использованием пакета служб SSIS. Мой текущий подход состоит из трех этапов:

  1. Добавить компонент источника OLE DB, который извлекает все столбцы из моей первой исходной таблицы
  2. Добавление компонента «Уточняющий запрос», который является следующим шагом после моего компонента «Источник OLE DB». В этом я запрашиваю вторую исходную таблицу «используя результаты SQL-запроса», которая не возвращает нулевых значений, затем перетаскиваю идентификатор внешнего ключа из «доступных входных столбцов» в первичный ключ в доступных столбцах поиска. Я также отмечаю флажки в «доступных столбцах ввода», чтобы добавить еще 2 столбца.
  3. Добавить OLE DB Destination, указывает на мою таблицу назначения.

Этот процесс завершается неудачей на первом этапе, а не на этапе поиска, и завершается с ошибкой «Строка не дала совпадений во время поиска». Внешний ключ не может быть нулевым, и, очевидно, первичный ключ также не может. Я использовал оператор SQL на шаге к тому, чтобы я мог убедиться, что я не получаю нулевые значения даты в столбцах (их было несколько), но я все еще получаю ошибку. Если я выведу путь ошибки первого шага в пункт назначения плоского файла, я получу пустой CSV (просмотр в режиме отладки говорит, что в плоский файл поступает ~ 600 тыс. Записей).

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

Помощь оценена!

1 Ответ

3 голосов
/ 11 мая 2010

Похоже, у вас есть несоответствие в поиске. Я бы вручную запустил запросы и убедился, что у обоих OLE DB SOurce нет нулевых внешних ключей; и что каждый внешний ключ соответствует чему-то в таблице поиска.

Здесь есть более простой подход. Используйте ваш запрос внутреннего соединения, который вы упомянули в OLE DB SOurce. Не используйте таблицу select, предоставьте свой SQL-запрос с объединением. Это позволит SQL Server выполнить всю тяжелую работу по объединению, а затем SSIS сможет выполнить передачу.

...