-1

enter image description hereFlatFile Источник в SSIS

In My Flat источник файла, я хочу, чтобы передать все эти данные в OLDEDB. Но я хочу ДИВИДИТЬ данные в разные таблицы.

Пример.
Таблица первая начинается с первого% F и заканчивается перед другим% F в col [0].
И вторая таблица начинается со второго% F с другим заголовком, потому что она имеет разные поля, чем первая таблица.

Возможно ли это в SSIS?

ответ

0

Похоже, что в одном плоском файле предоставляются 2 таблицы данных. Из изображения, похоже, обе таблицы имеют и другую структуру данных. Я думаю, сложно загрузить файл за один шаг.

Возможно, эти шаги помогут вам.

Шаг 1. Загрузите все данные в таблицу (укажите в таблице с именем [Table]). Нагрузка в том числе column headers .DATA может выглядеть следующим образом (только шаблон как пример.) В этой таблице убедитесь, что вы добавляете колонку инкремента

enter image description here

Шаг 2. Запрос, как показано ниже поможет вам идентифицировать из в какой строке начинается вторая таблица.

Select Top 1 Column0 From [Table] Where Column1 = '%F' Order By Column0 Desc 

В вашем пакете SSIS, добавить переменную для хранения результата выше

Шаг 3. Добавьте ДПФ с источником, как [Table]. После источника добавить условное разделение.

If Column0 < variable value, sent row to [Table1] 
else to [Table2] 

Может быть еще несколько изменений.


Добавлено согласно комментарий:

Если у вас есть более чем 1 стол.

Ставка 1. Загрузите все данные в одну таблицу.

Ставка 2. Добавьте дополнительный столбец ([columnX] на изображении). Его ценность должна быть такой, чтобы с ней вы могли идентифицировать таблицу.

enter image description here

шаг 3. Используйте само условное разделение, используя columnX, сопоставляя каждую строку с соответствующей таблицей.


По желанию, добавил редактирование: использовать логику как this..Run сценарий в SSMS и увидеть результат.

Declare @table table (id int identity(1,1),Col1 varchar(5), ColX int) 
Insert into @table (Col1) Values 
('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'), 
('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'), 
('%F'),('%R'),('%R'),('%R'),('%R') 

Select * 
from @table A 

Update Y 
Set  ColX = Z.X 
From @table Y Join(
Select A.id FromId,B.id ToId,A.X From 
(
Select id,ROW_NUMBER() Over (Order By id) X From (
Select id from @table Where Col1 = '%F' 
Union 
Select max(id) id From @table) Lu) A, 
(
Select id,ROW_NUMBER() Over (Order By id) X From (
Select id from @table Where Col1 = '%F' 
Union 
Select max(id) id From @table) Lu) B 
Where A.X = B.X - 1) Z On Y.id >= Z.FromId and Y.id < Z.ToId 
Select * 
from @table A 

Select * 
from @table A 
+0

Обращайтесь за помощью. –

+0

Спасибо! но проблема в том, что в плоском файле есть более двух таблиц. Примерно 10-20 таблиц в файле. И в какой-то таблице больше столбцов, чем остальные. Пример. 1-я таблица имеет 10 таблиц, а вторая таблица имеет 6 столбцов, которые оставили четыре столбца равными нулю, но если 3-я таблица больше 10, остальные столбцы переносятся на последний столбец [9]. Поскольку чтение столбцов было основано на первой таблице, которая содержит 10 столбцов –

+0

, см. Комментарий –

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