Det finns två olika tillvägagångssätt du kan göra.
Den första är som user569711 beskrivs och använd en ForEach Enumerator och ring din befintliga lagrade procedur. Fördelen med detta är att ditt beteende bör vara exakt som det du för närvarande upplever och dina tester bör bara behöva fokusera på att säkerställa att SSIS-paketet plockar upp rätt filer.
Det andra är att använda SSIS-funktionerna för att hantera import av BLOB-typer.
Kontrollflöde
Du vill ha 1 till 2 variabler definierade beroende på ditt tillvägagångssätt. Båda kommer att vara strängdatatyper. Jag skapade SourceFolder
och CurrentFileName
. Den förra definierar var filerna kommer ifrån och används i båda tillvägagångssätten. Den senare används i ForEach Loop Container för att fånga den "aktuella" filen.
Dataflöde
För att få dataflödet att fungera måste du få den fullt kvalificerade listan med filnamn som läggs till i pipelinen. Det enklaste sättet är att använda en skripttransformation, som fungerar som en källa och lägga till det i alla filer som uppfyller ditt villkor (*.xml).
Foreach Loop Container
Konfigurera som sådan
Samling
Variabelmappningar
Kör SQL-uppgift
Konfigurera så
Skriptkälla
Den här uppgiften lägger till tillgängliga filer i dataflödet. Mindre anmärkning, detta kommer att gå igenom undermappar som skiljer sig från hur vi har konfigurerat Foreach. Det är en enkel ändring av den tredje parametern (eller utelämnandet) för att bara göra den till toppnivå.
Identifiera din variabel så att den är tillgänglig i skriptuppgiften
Lägg till lämpliga utdatakolumner. Dina längder kan variera beroende på din miljö.
Skriv ett skript här
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";
}
}
}
Importera kolumntransformation
Konfigurera så här
Anteckna ID här
Bind det ID tillbaka till kolumnen med namnet
OLE DB-destination
Konfigurera. Stöder inte alternativet Snabbladdning.
Referens
Trevligt inlägg om hur du använder Import Column Transformation