Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

insérer un fichier XML dans SQL via SSIS

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