2015-06-16 3 views
0

Я пытаюсь использовать динамическое сопоставление столбцов, выбрав таблицу адресатов, используя опцию «Имя переменной» в пункте назначения OLEDB. Я получаю сообщение об ошибке: «OLE DB Destination» не удалось проверить и вернул статус проверки «VS_NEEDSNEWMETADATA».Проверка динамических столбцов SSIS

Насколько я понял, в SSIS невозможна проверка динамического столбца. Но почему, почему можно выбрать назначение таблицы в OLEDB, используя имя переменной? Разве это не динамическое сопоставление столбцов?

То, что я пытаюсь сделать, - создать цикл foreach для чтения списка таблиц и импортировать эти таблицы из исходного db в промежуточную область. Использование назначения имен переменных в OLEDB кажется мне идеальным, но оно не работает, даже если включить DelayValidation в потоке данных.

Спасибо, Родриго

+2

Для разных таблиц с одинаковыми метаданными. Динамические изменения метаданных невозможно. – mxix

ответ

1

Почему я использую TableName из переменной для моего OLE DB назначения?

  1. Я автоматизирую из разработки моего пакета SSIS. Вместо того, чтобы указывать имя каждой таблицы, у меня есть переменная с именем FullyQualifiedName, которую я заполняю один раз, а затем повторно использую для моего пакета. Подумайте об усечении и перезагрузке шаблона: выполните задачу SQL, чтобы очистить целевую таблицу, цикл Foreach для загрузки всех файлов - либо потому, что имена динамические, либо у меня загружается несколько дней, а затем архивируйте файл. Мне нужно будет ссылаться на эту таблицу не менее двух раз в этом сценарии. Имея имя таблицы в переменной, я могу определить ее один раз и ссылаться на нее во многих разных местах.

  2. Я работал в средах, где мы физически изолируем данные на основе клиента. i.eBlackstone.Sales, Yampas.Sales, Ranger.Sales и т. Д. Когда клиент входит в систему, их учетная запись может получать доступ только к данным в своей схеме. Таблицы идентичны по структуре, но для обеспечения изоляции они имеют разные имена. Для такого сценария вы можете сопоставить имя файла с целевой таблицей и, следовательно, хотите использовать переменную для управления таблицей.

Как вы уже определили, вы не можете выполнить динамическое сопоставление столбцов в том виде, в котором вы пытаетесь. Если это прямая копия из исходного кода в вашу промежуточную среду, я бы просто использовал такую ​​технологию, как Biml, для создания пакетов и выполнения с ней.

0

Я столкнулся и работал над такими просьбами. NO, SSIS не позволит вам динамических сопоставлений столбцов. Так что я пытался что-то на линии ниже:

  1. Вы должны сначала использовать свои знания о системе и собрать своего рода таблицу конфигурации, которая будет сказать вам следующие вещи -

    -source Таблица (SourceTable)

    -Columns быть извлечены из исходной таблицы (SourceQuery)

    ПОДСКАЗКА: а SELECT query..egSELECT ID, Name, Salary from dbo.tblEmployee

    -destination Таблица (DestinationTable)

    -Columns, которые должны подаваться из источника

    -Few другие детали, как свойства имя сервера/соединения и т.д. ..

Вы необходимо будет пройти через строки этой таблицы с помощью контейнера Loop ForEach.

  1. Затем укажите максимальное количество столбцов и максимальную длину данных в этих столбцах в источнике, который может быть извлечен. Вам нужно будет создать таблицу с информацией в ближайшее время.

  2. Создайте своего рода промежуточный стол, скажем, StgData. Я создам эту таблицу с 50 столбцами, все данные типа NVARCHAR(MAX). CREATE заявление должно выглядеть следующим образом:

    CREATE TABLE StgData 
    (       
    Column1 NVARCHAR(MAX), 
    Column2 NVARCHAR(MAX), 
    Column3 NVARCHAR(MAX), 
    ....   
    Column50 NVARCHAR(MAX) 
    ) 
    

Необработанные данные будут загружены на StgData.

  1. Теперь у нас есть контур контура ForEach, проходящий через ETLMappings. Для того, чтобы загрузить данные в себя, Вам необходимо будет использовать операционные системы: INSERT.

Сценарий внутри задачи будет выглядеть следующим образом: -

INSERT INTO dbo.StgData 
? 

? соответствует SourceQuery колонку (который должен быть захвачен ForEach контейнера

После StgData загружен, он должен. использовать для загрузки DestinationTable (также захвачен в контуре ForEach)

Теперь вам снова нужно имеют хорошее представление о сопоставлении схем и столбцов. Таблица конфигурации должна содержать столбец, который хранит SQL-запрос в форме

INSERT INTO DestTable1 SELECT Col1, CAST(Col2 as float) Col2 FROM StgData 

Что-то на этих строках.

Это просто базовая структура. Конечно, необходимо добавить много форматирования и настройки.

Смежные вопросы