Има два различни подхода, които можете да направите.
Първият е както е описано от user569711 и използвайте ForEach Enumerator и извикайте вашата съществуваща съхранена процедура. Предимството на това е, че вашето поведение трябва да бъде точно като това, което изпитвате в момента и вашето тестване трябва да се съсредоточи само върху това, че пакетът SSIS избира правилните файлове.
Второто е да се използват възможностите на SSIS извън кутията за справяне с импортирането на BLOB типове.
Поток на управление
Вие ще искате 1 до 2 променливи, дефинирани в зависимост от вашия подход. И двата ще бъдат низови типове данни. Създадох SourceFolder
и CurrentFileName
. Първият определя откъде ще идват файловете и се използва и в двата подхода. Последният се използва в ForEach Loop Container за улавяне на „текущия“ файл.
Поток от данни
За да накарате потока от данни да работи, ще трябва да получите напълно квалифицирания списък с имена на файлове, добавени в конвейера. Най-лесният начин е да използвате трансформация на скрипт, действаща като източник и добавяйки това във всички файлове, отговарящи на вашето условие (*.xml).
Контейнер за цикъл Foreach
Конфигурирайте като такъв
Колекция
Съответствия на променливи
Изпълнете SQL задача
Конфигурирайте по този начин
Източник на скрипт
Тази задача ще добави наличните файлове в потока от данни. Малка забележка, това ще премине през подпапки, което се различава от начина, по който сме конфигурирали Foreach. Това е проста промяна на третия параметър (или пропуск), за да го направите само от най-високо ниво.
Идентифицирайте вашата променлива, така че да е достъпна в задачата на скрипта
Добавете съответните изходни колони. Вашите дължини може да варират в зависимост от вашата среда.
Скрипт тук
using System;
using System.Data;
using System.IO;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void CreateNewOutputRows()
{
string fileMask = string.Empty;
string sourceFolder = string.Empty;
fileMask = @"*.xml";
sourceFolder = this.Variables.SourceFolder;
foreach (string fileName in Directory.GetFiles(sourceFolder, fileMask, SearchOption.AllDirectories))
{
Output0Buffer.AddRow();
Output0Buffer.FileName = fileName;
Output0Buffer.SourceName = "Dataflow";
}
}
}
Импортиране на трансформация на колона
Конфигурирайте така
Отбележете ID тук
Свържете този идентификатор обратно към колоната с името
Дестинация на OLE DB
Конфигуриране. Не поддържа опция за бързо зареждане.
Справка
Хубава публикация относно използването на Импортиране на трансформация на колони