2014-09-16 1 views
0

У меня есть небольшой вопрос SSIS. Я извлекаю данные из таблицы MySQL с различным списком столбцов в таблицу SQL Server с фиксированным списком столбцов.обработанные динамически отсутствующие колонки источника в ssis

исходная таблица: Test (MySQL сервер)

id |  name | sal  | deptno | loc  | referby 
1 |  abc |  100  |10  | hyd  | xyz 
2 |  mnc |  200  |20  |chen  | pqr 

Сначала я выбираю конфигурацию таблицы MySQL, то я перетащить oledbdestination для MySQL конфигурации таблицы сервера. Я настраиваю целевую таблицу, и после этого пакет работает нормально, и данные выглядят следующим образом.

Целевая таблица: Test (SQL Server)

id |  name |  sal  |deptno  | loc   |referby 
1 |  abc |  100  |10   | hyd   | xyz 
2 |  mnc |  200  |20   |chen   | pqr 

Во второй раз я бегу пакет, столбец был удален из схемы исходной таблицы, так что пакет не удается. Я открываю конфигурацию сервера testsource MySql и отредактировать запрос, чтобы вернуть NULL для отсутствующего столбца:

select id,'null' as name,sal,deptno,loc,referby from test 

Я повторно пакет и данные выглядит следующим образом.

Целевая таблица: Test (SQL Server)

id |  name |  sal  |deptno  | loc   |referby 
1 |  null |  100  |10   | hyd   | xyz 
2 |  null |  200  |20   |chen   | pqr 

Я всегда усечь данные целевой таблицы и нагрузки.

Таблица целей имеет неизменный список столбцов, в то время как список столбцов исходной таблицы может отличаться. Я не хочу продолжать редактировать запрос к учетной записи для возможных отсутствующих столбцов. Как я могу справиться с этим на уровне пакета?

ответ

0

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

http://www.sqlservercentral.com/stairway/100550/

2

Пара идей:

  • Использование динамического SQL. Замените свой простой SELECT ... запрос, который выполняет итерацию через список столбцов целевой таблицы (возможно, получен из SHOW COLUMNS), создает запрос SELECT, который вставляет NULL для отсутствующих столбцов, затем выполняет его через PREPARE and EXECUTE.

    Запрос, генерирующий запрос, должен был бы создать оператор SELECT, содержащий фиксированный набор столбцов, который ожидает ваша целевая таблица. Если ожидаемый столбец не существует в источнике, запрос-запрос должен вставить в запрос заполнителя NULL AS ColumnName.

    (я не эксперт MySQL, так что я не уверен в точных возможностей MySQL, в этом отношении, но в теории это звучит подход работоспособным.)

  • Используйте компонент сценария в качестве источника данных. Настройте этот компонент с ожидаемыми столбцами вывода.Попросите компонент запросить исходную базу данных (возможно, используя простой SELECT * FROM ....), а затем скопируйте только соответствующие столбцы, которые существуют от источника к буферу строки вывода. При таком подходе столбцы, которые не существуют, автоматически выводятся в поток данных как null/их значение по умолчанию, потому что компонент Script не будет устанавливать их в значение.
+0

HI, чтобы решить эту проблему, если вы не можете предоставить динамический SQL-запрос или код сценария для двух столбцов, как мы это делаем, пожалуйста, дайте решение. – user1623352

+0

@ user1623352, почему бы вам не опубликовать каждый отдельный вопрос? Один вопрос должен быть помечен SQL/MySQL, в котором спрашивается, как построить запрос, который всегда возвращает фиксированный набор столбцов, даже если схема исходной таблицы изменилась (в этом вопросе не обязательно упоминать SSIS). Другой будет направлен назад на теге SSIS, запрашивая, как создать компонент скрипта, который делает то, что вы хотите. С каждым вопросом было бы лучше, если бы вы разместили какой-то код, показывающий, что вы пытались сделать, или объяснили, как вы пытались найти ответ самостоятельно и были в тупике. –