Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

XML-Datei in SQL über SSIS einfügen

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