Ci sono due diversi approcci che puoi fare.
Il primo è come descritto dall'utente569711 e usa un ForEach Enumerator e chiama la tua stored procedure esistente. Il vantaggio di questo è che il tuo comportamento dovrebbe essere esattamente quello che stai vivendo attualmente e il tuo test dovrebbe concentrarsi solo sulla garanzia che il pacchetto SSIS raccolga i file giusti.
Il secondo consiste nell'utilizzare le funzionalità predefinite di SSIS per gestire l'importazione di tipi BLOB.
Controllo del flusso
Vorrai da 1 a 2 variabili definite a seconda del tuo approccio. Entrambi saranno tipi di dati stringa. Ho creato SourceFolder
e CurrentFileName
. Il primo definisce da dove verranno i file e viene utilizzato in entrambi gli approcci. Quest'ultimo viene utilizzato nel ForEach Loop Container per acquisire il file "corrente".
Flusso di dati
Per far funzionare il flusso di dati, sarà necessario ottenere l'elenco completo dei nomi di file aggiunti alla pipeline. Il modo più semplice è utilizzare una trasformazione dello script, fungendo da origine e aggiungere tutti i file che soddisfano le tue condizioni (*.xml).
Contenitore Foreach Loop
Configura come tale
Collezione
Mapping delle variabili
Esegui attività SQL
Configura così
Sorgente script
Questa attività aggiungerà i file disponibili al flusso di dati. Nota minore, questo attraverserà le sottocartelle che differiscono da come abbiamo configurato Foreach. È una semplice modifica al terzo parametro (o omissione) per renderlo solo di primo livello.
Identifica la tua variabile in modo che sia disponibile nell'attività di script
Aggiungi le colonne di output appropriate. Le tue lunghezze possono variare in base al tuo ambiente.
Scrivi qui
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";
}
}
}
Importa la trasformazione della colonna
Configura in questo modo
Prendere nota dell'ID qui
Ricollega quell'ID alla colonna con il nome
Destinazione OLE DB
Configura. Non supporta l'opzione di caricamento rapido.
Riferimento
Bel post sull'utilizzo della Importa la trasformazione della colonna