sql >> Databasteknik >  >> RDS >> Sqlserver

infoga XML-fil i SQL via SSIS

Det finns två olika tillvägagångssätt du kan göra.

Den första är som user569711 beskrivs och använd en ForEach Enumerator och ring din befintliga lagrade procedur. Fördelen med detta är att ditt beteende bör vara exakt som det du för närvarande upplever och dina tester bör bara behöva fokusera på att säkerställa att SSIS-paketet plockar upp rätt filer.

Det andra är att använda SSIS-funktionerna för att hantera import av BLOB-typer.

Kontrollflöde

Du vill ha 1 till 2 variabler definierade beroende på ditt tillvägagångssätt. Båda kommer att vara strängdatatyper. Jag skapade SourceFolder och CurrentFileName . Den förra definierar var filerna kommer ifrån och används i båda tillvägagångssätten. Den senare används i ForEach Loop Container för att fånga den "aktuella" filen.

Dataflöde

För att få dataflödet att fungera måste du få den fullt kvalificerade listan med filnamn som läggs till i pipelinen. Det enklaste sättet är att använda en skripttransformation, som fungerar som en källa och lägga till det i alla filer som uppfyller ditt villkor (*.xml).

Foreach Loop Container

Konfigurera som sådan

Samling

Variabelmappningar

Kör SQL-uppgift

Konfigurera så

Skriptkälla

Den här uppgiften lägger till tillgängliga filer i dataflödet. Mindre anmärkning, detta kommer att gå igenom undermappar som skiljer sig från hur vi har konfigurerat Foreach. Det är en enkel ändring av den tredje parametern (eller utelämnandet) för att bara göra den till toppnivå.

Identifiera din variabel så att den är tillgänglig i skriptuppgiften

Lägg till lämpliga utdatakolumner. Dina längder kan variera beroende på din miljö.

Skriv ett skript här

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

Importera kolumntransformation

Konfigurera så här

Anteckna ID här

Bind det ID tillbaka till kolumnen med namnet

OLE DB-destination

Konfigurera. Stöder inte alternativet Snabbladdning.

Referens

Trevligt inlägg om hur du använder Import Column Transformation




  1. pgbackups på Heroku hittades inte

  2. MySQL på dubblettnyckel... få befintligt ID?

  3. Meddelande om Oracle-tabelländringar i Java

  4. Kontrollera om alla värden i en array finns i en databaskolumn