Der er to forskellige tilgange, du kan gøre.
Den første er som bruger569711 skitseret og brug en ForEach Enumerator og kald din eksisterende lagrede procedure. Fordelen ved dette er, at din adfærd skal være præcis, som den du oplever i øjeblikket, og din test skal kun fokusere på at sikre, at SSIS-pakken samler de rigtige filer op.
Den anden er at bruge out-of-box-kapaciteterne i SSIS til at håndtere import af BLOB-typer.
Kontrol flow
Du vil have 1 til 2 variable defineret afhængigt af din tilgang. Begge vil være strengdatatyper. Jeg oprettede SourceFolder
og CurrentFileName
. Førstnævnte definerer, hvor filerne kommer fra og bruges i begge metoder. Sidstnævnte bruges i ForEach Loop Container til at fange den "aktuelle" fil.
Dataflow
For at få datastrømmen til at fungere, skal du få den fuldt kvalificerede liste over filnavne tilføjet i pipelinen. Den nemmeste måde er at bruge en scripttransformation, der fungerer som en kilde, og få den tilføjelse i alle filer, der opfylder din betingelse (*.xml).
Foreach Loop Container
Konfigurer som sådan
Indsamling
Variable Mappings
Udfør SQL-opgave
Konfigurer således
Scriptkilde
Denne opgave tilføjer de tilgængelige filer til dataflowet. Mindre bemærkning, dette vil krydse undermapper, som adskiller sig fra, hvordan vi har konfigureret Foreach. Det er en simpel ændring af den tredje parameter (eller udeladelse) for kun at gøre den til øverste niveau.
Identificer din variabel, så den er tilgængelig i scriptopgaven
Tilføj de relevante outputkolonner. Dine længder kan variere afhængigt af dit miljø.
Script her
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";
}
}
}
Importér kolonnetransformation
Konfigurer sådan
Notér ID'et her
Bind det ID tilbage til kolonnen med navnet
OLE DB-destination
Konfigurer. Understøtter ikke muligheden for hurtig indlæsning.
Reference
Godt indlæg om brug af Importer kolonnetransformation