Vous pouvez faire deux approches différentes.
Le premier est décrit par user569711 et utilise un énumérateur ForEach et appelle votre procédure stockée existante. L'avantage est que votre comportement doit être exactement celui que vous rencontrez actuellement et que vos tests ne doivent viser qu'à garantir que le package SSIS récupère les bons fichiers.
La seconde consiste à utiliser les fonctionnalités prêtes à l'emploi de SSIS pour gérer l'importation de types BLOB.
Flux de contrôle
Vous voudrez 1 à 2 variables définies en fonction de votre approche. Les deux seront des types de données de chaîne. J'ai créé SourceFolder
et CurrentFileName
. Le premier définit d'où proviendront les fichiers et est utilisé dans les deux approches. Ce dernier est utilisé dans le ForEach Loop Container pour capturer le fichier "courant".
Flux de données
Pour que le flux de données fonctionne, vous devrez obtenir la liste complète des noms de fichiers ajoutés au pipeline. Le moyen le plus simple consiste à utiliser une transformation de script, agissant comme une source et à l'ajouter dans tous les fichiers répondant à votre condition (*.xml).
Conteneur de boucle Foreach
Configurer comme tel
Collecte
Mappages de variables
Exécuter la tâche SQL
Configurez ainsi
Source du script
Cette tâche ajoutera les fichiers disponibles dans le flux de données. Remarque mineure, cela traversera des sous-dossiers qui diffèrent de la façon dont nous avons configuré Foreach. Il s'agit d'une simple modification du troisième paramètre (ou omission) pour en faire le niveau supérieur uniquement.
Identifiez votre variable afin qu'elle soit disponible dans la tâche de script
Ajoutez les colonnes de sortie appropriées. Vos longueurs peuvent varier en fonction de votre environnement.
Scénario ici
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";
}
}
}
Importer la transformation de colonne
Configurez comme ceci
Notez l'ID ici
Reliez cet ID à la colonne avec le nom
Destination OLE DB
Configurez. Ne prend pas en charge l'option de chargement rapide.
Référence
Bel article sur l'utilisation de la Importer la transformation de colonne