2010-05-11 1 views
0

Я новичок в SSIS, поэтому, пожалуйста, несите меня.Объединение двух таблиц с SSIS в одну таблицу адресатов

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

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

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

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

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

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

Помогите оценить!

ответ

3

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

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

+0

Я согласен с вами в том, что это звучит так, как будто у меня есть несоответствие - все, что я читал в Интернете, похоже, указывает на это, но обе таблицы (та, которая содержит внешний ключ, а также таблицу с первичным) являются int datatypes и не допускают null. Мне нравится идея альтернативного метода, поэтому я попробовал. Я понятия не имел, что вы можете сделать SQL-команду в исходном коде, но ее прямо там в режиме доступа к данным :) Большое спасибо за помощь, которая отлично работала! – Mario

+0

Если вы хотите узнать больше о том, что случилось, у меня есть предложение. В Задаче поиска вы можете настроить неудачную строку, чтобы перейти к отдельному выходу. В Задаче LookUp выберите Configure Error Output. Выберите, что вы хотите, чтобы произошла ошибка. Вы можете перенаправить его на другой выход или даже проигнорировать. Если вы перенаправляете, выгружаете его в текстовый файл и видите, что происходит. Или проигнорируйте его и посмотрите в таблицу назначения для строк, в которых отсутствуют данные поиска. Удачи! –