Istnieją dwa różne podejścia, które możesz zrobić.
Pierwszy jest opisany jako user569711 i użyj modułu wyliczającego ForEach i wywołaj istniejącą procedurę składowaną. Zaletą tego jest to, że twoje zachowanie powinno być dokładnie takie, jakiego obecnie doświadczasz, a twoje testy powinny skupiać się tylko na upewnieniu się, że pakiet SSIS pobiera właściwe pliki.
Drugim jest wykorzystanie gotowych możliwości SSIS do radzenia sobie z importowaniem typów BLOB.
Przepływ sterowania
Będziesz potrzebował od 1 do 2 zmiennych zdefiniowanych w zależności od twojego podejścia. Oba będą typami danych typu string. Utworzyłem SourceFolder
i CurrentFileName
. Pierwsza określa, skąd będą pochodzić pliki i jest używana w obu podejściach. Ten ostatni jest używany w kontenerze pętli ForEach do przechwytywania „bieżącego” pliku.
Przepływ danych
Aby przepływ danych działał poprawnie, musisz dodać do potoku w pełni kwalifikowaną listę nazw plików. Najprostszym sposobem jest użycie transformacji skryptu, działającej jako źródło i dodanie wszystkich plików spełniających twój warunek (*.xml).
Kontener pętli foreach
Skonfiguruj jako taki
Kolekcja
Mapowania zmiennych
Wykonaj zadanie SQL
Skonfiguruj w ten sposób
Źródło skryptu
To zadanie doda dostępne pliki do przepływu danych. Drobna uwaga, spowoduje to przechodzenie przez podfoldery, które różnią się od konfiguracji Foreach. Jest to prosta zmiana trzeciego parametru (lub pominięcia), aby ustawić go tylko na najwyższym poziomie.
Zidentyfikuj swoją zmienną, aby była dostępna w zadaniu skryptu
Dodaj odpowiednie kolumny wyjściowe. Twoje długości mogą się różnić w zależności od środowiska.
Skrypt tutaj
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";
}
}
}
Importuj przekształcenie kolumny
Skonfiguruj w ten sposób
Zapisz tutaj swój identyfikator
Przywiąż ten identyfikator z powrotem do kolumny z nazwą
Miejsce docelowe OLE DB
Konfiguruj. Nie obsługuje opcji szybkiego ładowania.
Odniesienie
Miły post na temat korzystania z Importuj transformację kolumny