sql >> Database >  >> RDS >> Sqlserver

XML-bestand in SQL invoegen via SSIS

Er zijn twee verschillende benaderingen die u kunt doen.

De eerste is als user569711 geschetst en gebruik een ForEach-enumerator en roep uw bestaande opgeslagen procedure aan. Het voordeel hiervan is dat uw gedrag precies hetzelfde moet zijn als wat u momenteel ervaart en dat uw testen zich alleen moeten concentreren op het zorgen dat het SSIS-pakket de juiste bestanden oppikt.

De tweede is om de kant-en-klare mogelijkheden van SSIS te gebruiken voor het importeren van BLOB-typen.

Besturingsstroom

Afhankelijk van uw aanpak wilt u 1 tot 2 variabelen definiëren. Beide zullen string-gegevenstypen zijn. Ik heb SourceFolder gemaakt en CurrentFileName . De eerste definieert waar de bestanden vandaan komen en wordt in beide benaderingen gebruikt. De laatste wordt gebruikt in de ForEach Loop-container om het "huidige" bestand vast te leggen.

Gegevensstroom

Om de gegevensstroom te laten werken, moet u de volledig gekwalificeerde lijst met bestandsnamen aan de pijplijn toevoegen. De eenvoudigste manier is om een ​​scripttransformatie te gebruiken, die als bron fungeert en die toe te voegen aan alle bestanden die aan uw voorwaarde voldoen (*.xml).

Foreach Loop-container

Als zodanig configureren

Collectie

Variabele toewijzingen

SQL-taak uitvoeren

Configureer zo

Scriptbron

Met deze taak worden de beschikbare bestanden aan de gegevensstroom toegevoegd. Kleine opmerking, dit zal submappen doorkruisen die verschillen van hoe we de Foreach hebben geconfigureerd. Het is een simpele wijziging van de derde parameter (of weglating) om deze alleen op het hoogste niveau te krijgen.

Identificeer uw variabele zodat deze beschikbaar is in de scripttaak

Voeg de juiste uitvoerkolommen toe. Uw lengte kan variëren, afhankelijk van uw omgeving.

Script 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";
        }
    }
}

Kolomtransformatie importeren

Configureer als volgt

Noteer hier de ID

Bind die ID terug aan de kolom met de naam

OLE DB-bestemming

Configureren. Ondersteunt de Fast Load-optie niet.

Referentie

Leuke post over het gebruik van de Kolomtransformatie importeren




  1. Hoe kan ik debuggen waarom de eenvoudigste MySQL-query false retourneert?

  2. Is er een SQL Server Profiler voor SQL Server Express?

  3. Ernstige accenten in plaats van '' in mysqli_query

  4. Acquire_lock() werkt niet. Bot verzendt nog steeds snel verzoeken. PHP + AJAX