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

indsæt XML-fil i SQL via SSIS

Der er to forskellige tilgange, du kan gøre.

Den første er som bruger569711 skitseret og brug en ForEach Enumerator og kald din eksisterende lagrede procedure. Fordelen ved dette er, at din adfærd skal være præcis, som den du oplever i øjeblikket, og din test skal kun fokusere på at sikre, at SSIS-pakken samler de rigtige filer op.

Den anden er at bruge out-of-box-kapaciteterne i SSIS til at håndtere import af BLOB-typer.

Kontrol flow

Du vil have 1 til 2 variable defineret afhængigt af din tilgang. Begge vil være strengdatatyper. Jeg oprettede SourceFolder og CurrentFileName . Førstnævnte definerer, hvor filerne kommer fra og bruges i begge metoder. Sidstnævnte bruges i ForEach Loop Container til at fange den "aktuelle" fil.

Dataflow

For at få datastrømmen til at fungere, skal du få den fuldt kvalificerede liste over filnavne tilføjet i pipelinen. Den nemmeste måde er at bruge en scripttransformation, der fungerer som en kilde, og få den tilføjelse i alle filer, der opfylder din betingelse (*.xml).

Foreach Loop Container

Konfigurer som sådan

Indsamling

Variable Mappings

Udfør SQL-opgave

Konfigurer således

Scriptkilde

Denne opgave tilføjer de tilgængelige filer til dataflowet. Mindre bemærkning, dette vil krydse undermapper, som adskiller sig fra, hvordan vi har konfigureret Foreach. Det er en simpel ændring af den tredje parameter (eller udeladelse) for kun at gøre den til øverste niveau.

Identificer din variabel, så den er tilgængelig i scriptopgaven

Tilføj de relevante outputkolonner. Dine længder kan variere afhængigt af dit miljø.

Script her

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

Importér kolonnetransformation

Konfigurer sådan

Notér ID'et her

Bind det ID tilbage til kolonnen med navnet

OLE DB-destination

Konfigurer. Understøtter ikke muligheden for hurtig indlæsning.

Reference

Godt indlæg om brug af Importer kolonnetransformation




  1. Hvorfor ville rækker matche, men ikke blive ændret med en mysql-opdateringserklæring?

  2. Dupliker, kopier eller sikkerhedskopier tabeller i MySQL, MariaDB, Oracle, PostgreSQL, DB2 og SQLite med Create Table As SQL

  3. Hentning af datoer mellem en række datoer

  4. Kan vi bruge PHP-funktionen strtotime i Mysql Query