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