Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

inserire il file XML in SQL tramite SSIS

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