Итерация столбцов таблицы SQL Server с помощью цикла в Visual Studio SSIS

Я строю простой проект служб SSIS с использованием Visual Studio, которому необходимо скопировать стандартизированный столбец из сотен плоских файлов в соответствующие строки в таблицу SQL Server.

Все плоские файлы имеют одинаковый формат и помещаются в папку в алфавитном порядке, которая проходит по петле и имеет один столбец, скопированный на файл, в следующий доступный столбец таблицы SQL Server.

Процесс зацикливания следует этому руководству. Результаты предназначены для работы следующим образом:

file_1 
---------------------
col_1  col_2   col_3
-----  -----   -----
1      a       d
2      b       e
3      c       f

file_2 
---------------------
col_1  col_2   col_3
-----  -----   ------
1      g       j
2      h       k
3      i       l

Table_1
-------------------------------
col_1   file1_Col2   file2_col2
-----   ----------   ----------
 1         a             g
 2         b             h
 3         c             i

Проблема возникает в том, как сопоставить один и тот же столбец каждого плоского файла со следующим столбцом таблицы SQL Server. Мне интересно, возможно ли создать строковую переменную, которая могла бы использоваться в качестве указателя на следующий столбец или есть свойство, которое я мог бы настроить для достижения этого эффекта?

2 ответа

Вы можете сделать обходной путь для достижения этой цели:

  1. В контейнере цикла foreach добавьте задачу потока данных
  2. В Задаче DataFlow добавьте Источник Плоского файла, Назначение OLE DB (как объяснено в предоставленной вами ссылке)
  3. Добавьте компонент сценария между источником и назначением
  4. В компоненте Script вы должны выбрать Column9 как Input
  5. На вкладке "Вход и выход" добавьте выходные столбцы в "Выходной 0" (необходимо добавить все столбцы, найденные в целевой таблице)
  6. В ReadOnly Variables добавьте переменную, которая содержит имя файла
  7. В компоненте сценария на этапе PreExecute прочитайте имя файла из переменной ssis и получите номер файла (т. Е. Если file2, то number =2))
  8. Динамически назначайте значение для выходных столбцов сценария (следуйте моему ответу @ Как я могу выполнить цикл по столбцам по имени в компоненте сценария служб SSIS?)
  9. Сопоставить все выходные столбцы с соответствующими столбцами в месте назначения

Примечание: это создаст несколько строк для каждого файла:

Table_1
-------------------------------
col_1   file1_Col2   file2_col2
-----   ----------   ----------
1        a        
2        b        
3        c        
1                      g
2                      h
3                      i

Поэтому необходимо, чтобы все данные были импортированы в промежуточную таблицу, а затем после импорта всех файлов необходимо вставить данные в таблицу назначения:

Сначала вставьте строки, которые содержат только значения col1, затем обновите строки из таблицы, где значения не равны NULL.

Если вы используете контейнер цикла для перебора файлов, вы можете

  1. Установите переменные с именами столбцов и последним значением, используя задачу выражения
  2. Создайте поток данных и внутри него создайте ADO.Net Destination
  3. В свойствах потока данных вы можете использовать выражения для передачи запроса - свойство будет называться как-то вроде [Name Of Ado.Net].[SqlCommand], а значение будет представлять собой конкатенацию вашего оператора вставки с вашими переменными.

Надеюсь это не слишком абстрактно

Другие вопросы по тегам