Передача данных SSIS из Oracle в SQL Server — проверьте, существует ли таблица, если нет, создайте ее.

Инструмент DEV — Visual Studio 2015, обновление 2

По сути, я хочу сделать следующее в пакете SSIS:

  1. Удалить все существующие таблицы в базе данных
  2. Перенос данных из нескольких таблиц базы данных Oracle в таблицу SQL Server

    INSERT INTO SQL_DB_TABLE
        SELECT * 
        FROM ORACLE_DB.TABLE
    

Первая задача в моем контейнере последовательности — удалить все таблицы в задаче SQL. Затем для каждой таблицы Oracle у меня есть задача потока данных. В каждой задаче у меня есть источник ODBC, который представляет собой файл SELECT * FROM ORACLE_DB.TABLE. Я добавляю «Помощник назначения», затем нажимаю «Создать», чтобы создать таблицу на основе структуры таблицы Oracle.

введите здесь описание изображения

Добавьте имя таблицы, которое я хочу, затем нажмите «ОК». На этом этапе новая таблица добавляется в SQL Server.

введите здесь описание изображения

Я ищу способ реплицировать процесс «NEW» (создание таблицы в SQL Server) для каждой таблицы Oracle каждый раз, когда я запускаю контейнер последовательности. Предостережение в том, что столбцы в таблицах Oracle могут меняться, поэтому мне приходится каждый раз создавать их заново.


person Jeremy F.    schedule 05.05.2016    source источник


Ответы (2)


Вы не можете сделать это с DataFlows. Потоки данных должны иметь согласованные метаданные. Другими словами, столбцы должны оставаться неизменными при каждом запуске одного и того же потока данных.

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

Единственный способ, которым я могу придумать, чтобы сделать это в статическом пакете SSIS, — это задача сценария. И было бы страшно писать.

Лучшим способом может быть динамическое создание пакетов с помощью BiMLScript.

person Tab Alleman    schedule 05.05.2016

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

select column_name,data_type,data_length,nullable 
from user_tab_cols c where table_name = '{your table}'

Потребуется некоторая работа, чтобы определить связь между типами данных оракула и эквивалентами SQL.

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

person Dominic Cotton    schedule 22.06.2016