Я новичок в SSIS, поэтому, пожалуйста, несите меня.Объединение двух таблиц с SSIS в одну таблицу адресатов
Я создал проект служб Integration Services для SQL Server 2008 для импорта данных из старого db в новый. Одна из вещей, которую мне нужно сделать, - это импортировать данные из двух старых исходных таблиц в одну новую таблицу назначения.
Каков наилучший способ для этого?
Я могу легко увидеть результаты, которые я хочу с помощью простого внутреннего запроса на соединение, используя tsql, но мне не удастся использовать пакет SSIS. Мой текущий подход в три этапа:
- Добавить Источник компонент OLE DB, который тянет все столбцы из моей первой таблицы
- источник Добавить компонент поиска, который является следующим шагом после моего компонента OLE DB Source. В этом случае я запрашиваю вторую исходную таблицу «с использованием результатов SQL-запроса», которая не возвращает нулей, а затем перетаскивает идентификатор внешнего ключа из «доступных входных столбцов» в первичный ключ в доступных столбцах поиска. Я также проверяю флажки в «доступных входных столбцах», чтобы добавить еще 2 столбца.
- Добавить OLE DB Destination, указав на мою таблицу назначения.
Этот процесс выходит из строя на первом шаге, а не на этапе поиска, и с ошибкой «Строка не дала совпадения во время поиска». Внешний ключ не может быть нулевым, и, очевидно, первичный ключ тоже не может быть. Я использовал инструкцию SQL в шаге, чтобы я мог удостовериться, что в столбцах нет нулевых значений (их было несколько), но я все еще получаю ошибку. Если я выдаю путь отказа первого шага к объекту Flat File Destination, я получаю пустой CSV (просмотр в режиме отладки говорит, что записи за 600 000 идут в плоский файл).
Я довольно сильно смотрю на эту точку, и это похоже на то, что это должна быть очень простая задача. Я просмотрел веб-ответы и нашел это link, который звучит как та же самая проблема, с которой я столкнулся, но изменение настройки кеша не помогло.
Помогите оценить!
Я согласен с вами в том, что это звучит так, как будто у меня есть несоответствие - все, что я читал в Интернете, похоже, указывает на это, но обе таблицы (та, которая содержит внешний ключ, а также таблицу с первичным) являются int datatypes и не допускают null. Мне нравится идея альтернативного метода, поэтому я попробовал. Я понятия не имел, что вы можете сделать SQL-команду в исходном коде, но ее прямо там в режиме доступа к данным :) Большое спасибо за помощь, которая отлично работала! – Mario
Если вы хотите узнать больше о том, что случилось, у меня есть предложение. В Задаче поиска вы можете настроить неудачную строку, чтобы перейти к отдельному выходу. В Задаче LookUp выберите Configure Error Output. Выберите, что вы хотите, чтобы произошла ошибка. Вы можете перенаправить его на другой выход или даже проигнорировать. Если вы перенаправляете, выгружаете его в текстовый файл и видите, что происходит. Или проигнорируйте его и посмотрите в таблицу назначения для строк, в которых отсутствуют данные поиска. Удачи! –