sql >> Databáze >  >> RDS >> Sqlserver

vložit XML soubor do SQL přes SSIS

Můžete použít dva různé přístupy.

První je tak, jak je nastíněno user569711 a používá ForEach Enumerator a volá vaši existující uloženou proceduru. Výhodou je, že vaše chování by mělo být přesně takové, jaké právě zažíváte, a vaše testování by se mělo soustředit pouze na zajištění toho, aby balíček SSIS sbíral správné soubory.

Druhým je použití možností SSIS po vybalení k řešení importu typů BLOB.

Řízení toku

Budete chtít definovat 1 až 2 proměnné v závislosti na vašem přístupu. Oba budou řetězcové datové typy. Vytvořil jsem SourceFolder a CurrentFileName . První definuje, odkud budou soubory pocházet, a používá se v obou přístupech. Ten se používá v kontejneru ForEach Loop Container k zachycení "aktuálního" souboru.

Datový tok

Aby tok dat fungoval, budete muset do kanálu přidat úplný seznam názvů souborů. Nejjednodušší způsob je použít transformaci skriptu, která funguje jako zdroj a nechat přidat všechny soubory splňující vaši podmínku (*.xml).

Kontejner Foreach Loop

Konfigurovat jako takové

Kolekce

Mapování proměnných

Spustit úlohu SQL

Nakonfigurujte takto

Zdroj skriptu

Tato úloha přidá dostupné soubory do datového toku. Drobná poznámka, toto bude procházet podsložky, které se liší od toho, jak máme nakonfigurovaný Foreach. Je to jednoduchá změna třetího parametru (nebo vynechání), aby se stal pouze nejvyšší úrovní.

Identifikujte svou proměnnou, aby byla dostupná v úloze skriptu

Přidejte příslušné výstupní sloupce. Vaše délky se mohou lišit v závislosti na vašem prostředí.

Skript zde

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

Importovat transformaci sloupců

Nakonfigurujte takto

Poznamenejte si ID zde

Přivažte toto ID zpět ke sloupci s názvem

Cíl OLE DB

Konfigurovat. Nepodporuje možnost rychlého načítání.

Odkaz

Pěkný příspěvek o použití Importní transformace sloupců




  1. Při objednávání podle data desc, použití dočasného zpomaluje dotaz

  2. Jak zkrátit tabulku v MySQL

  3. Jak vytvořit balíček v Oracle SQL Developer?

  4. Jak omezit velikost sady výsledků pro libovolný dotaz v Ingres?