Es gibt zwei verschiedene Ansätze, die Sie tun können.
Die erste ist als user569711 beschrieben und verwendet einen ForEach-Enumerator und ruft Ihre vorhandene gespeicherte Prozedur auf. Der Vorteil dabei ist, dass Ihr Verhalten genau so sein sollte, wie Sie es gerade erleben, und Ihre Tests sollten sich nur darauf konzentrieren müssen, sicherzustellen, dass das SSIS-Paket die richtigen Dateien aufnimmt.
Die zweite besteht darin, die sofort einsatzbereiten Funktionen von SSIS für den Import von BLOB-Typen zu verwenden.
Kontrollfluss
Abhängig von Ihrem Ansatz möchten Sie 1 bis 2 Variablen definieren. Beide sind String-Datentypen. Ich habe SourceFolder
erstellt und CurrentFileName
. Ersteres definiert, woher die Dateien kommen, und wird in beiden Ansätzen verwendet. Letzteres wird im ForEach-Loop-Container verwendet, um die "aktuelle" Datei zu erfassen.
Datenfluss
Damit der Datenfluss funktioniert, müssen Sie die vollständig qualifizierte Liste der Dateinamen abrufen, die der Pipeline hinzugefügt werden. Am einfachsten ist es, eine Skriptumwandlung zu verwenden, die als Quelle fungiert und diese alle Dateien hinzufügen lässt, die Ihre Bedingung erfüllen (*.xml).
Foreach-Schleifencontainer
Als solches konfigurieren
Sammlung
Variablenzuordnungen
SQL-Task ausführen
So konfigurieren
Skriptquelle
Diese Aufgabe fügt die verfügbaren Dateien dem Datenfluss hinzu. Kleiner Hinweis:Dadurch werden Unterordner durchlaufen, was sich von der Konfiguration von Foreach unterscheidet. Es ist eine einfache Änderung am dritten Parameter (oder Weglassen), um ihn nur auf oberste Ebene zu bringen.
Identifizieren Sie Ihre Variable, damit sie in der Skriptaufgabe verfügbar ist
Fügen Sie die entsprechenden Ausgabespalten hinzu. Ihre Längen können je nach Umgebung variieren.
Skript 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";
}
}
}
Spaltentransformation importieren
So konfigurieren
Notieren Sie sich die ID hier
Verknüpfen Sie diese ID mit der Spalte mit dem Namen
OLE DB-Ziel
Konfigurieren. Unterstützt die Schnellladeoption nicht.
Referenz
Schöner Beitrag zur Verwendung der Import Column Transformation