Er zijn twee verschillende benaderingen die u kunt doen.
De eerste is als user569711 geschetst en gebruik een ForEach-enumerator en roep uw bestaande opgeslagen procedure aan. Het voordeel hiervan is dat uw gedrag precies hetzelfde moet zijn als wat u momenteel ervaart en dat uw testen zich alleen moeten concentreren op het zorgen dat het SSIS-pakket de juiste bestanden oppikt.
De tweede is om de kant-en-klare mogelijkheden van SSIS te gebruiken voor het importeren van BLOB-typen.
Besturingsstroom
Afhankelijk van uw aanpak wilt u 1 tot 2 variabelen definiëren. Beide zullen string-gegevenstypen zijn. Ik heb SourceFolder
gemaakt en CurrentFileName
. De eerste definieert waar de bestanden vandaan komen en wordt in beide benaderingen gebruikt. De laatste wordt gebruikt in de ForEach Loop-container om het "huidige" bestand vast te leggen.
Gegevensstroom
Om de gegevensstroom te laten werken, moet u de volledig gekwalificeerde lijst met bestandsnamen aan de pijplijn toevoegen. De eenvoudigste manier is om een scripttransformatie te gebruiken, die als bron fungeert en die toe te voegen aan alle bestanden die aan uw voorwaarde voldoen (*.xml).
Foreach Loop-container
Als zodanig configureren
Collectie
Variabele toewijzingen
SQL-taak uitvoeren
Configureer zo
Scriptbron
Met deze taak worden de beschikbare bestanden aan de gegevensstroom toegevoegd. Kleine opmerking, dit zal submappen doorkruisen die verschillen van hoe we de Foreach hebben geconfigureerd. Het is een simpele wijziging van de derde parameter (of weglating) om deze alleen op het hoogste niveau te krijgen.
Identificeer uw variabele zodat deze beschikbaar is in de scripttaak
Voeg de juiste uitvoerkolommen toe. Uw lengte kan variëren, afhankelijk van uw omgeving.
Script hier
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";
}
}
}
Kolomtransformatie importeren
Configureer als volgt
Noteer hier de ID
Bind die ID terug aan de kolom met de naam
OLE DB-bestemming
Configureren. Ondersteunt de Fast Load-optie niet.
Referentie
Leuke post over het gebruik van de Kolomtransformatie importeren