sql >> Base de Datos >  >> RDS >> Sqlserver

insertar archivo XML en SQL a través de SSIS

Hay dos enfoques diferentes que puede hacer.

El primero es como el usuario 569711 se describe y usa un Enumerador ForEach y llama a su procedimiento almacenado existente. La ventaja de esto es que su comportamiento debe ser exactamente como lo que está experimentando actualmente y sus pruebas solo deben centrarse en garantizar que el paquete SSIS esté seleccionando los archivos correctos.

El segundo es usar las capacidades listas para usar de SSIS para lidiar con la importación de tipos BLOB.

Flujo de control

Querrá definir de 1 a 2 variables dependiendo de su enfoque. Ambos serán tipos de datos de cadena. Creé SourceFolder y CurrentFileName . El primero define de dónde vendrán los archivos y se usa en cualquier enfoque. Este último se usa en ForEach Loop Container para capturar el archivo "actual".

Flujo de datos

Para que el flujo de datos funcione, deberá obtener la lista completa de nombres de archivo agregados a la canalización. La forma más sencilla es utilizar una Transformación de secuencia de comandos, que actúe como fuente y haga que se agreguen todos los archivos que cumplan su condición (*.xml).

Contenedor de bucles Foreach

Configurar como tal

Colección

Asignaciones de variables

Ejecutar tarea SQL

Configurar así

Fuente del guión

Esta tarea agregará los archivos disponibles al flujo de datos. Nota menor, esto atravesará subcarpetas que difieren de cómo tenemos configurado el Foreach. Es un simple cambio al tercer parámetro (u omisión) para que sea solo de nivel superior.

Identifique su variable para que esté disponible en la tarea del script

Agregue las columnas de salida apropiadas. Sus longitudes pueden variar según su entorno.

Guión aquí

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

Importar transformación de columna

Configurar así

Tome nota de la identificación aquí

Vuelva a vincular esa ID a la columna con el nombre

Destino OLE DB

Configurar. No es compatible con la opción de carga rápida.

Referencia

Buena publicación sobre el uso de Importar transformación de columnas