Existem duas abordagens diferentes que você pode fazer.
O primeiro é como user569711 descrito e use um Enumerador ForEach e chame seu procedimento armazenado existente. A vantagem disso é que seu comportamento deve ser exatamente como o que você está enfrentando no momento e seus testes devem se concentrar apenas em garantir que o pacote SSIS esteja selecionando os arquivos corretos.
A segunda é usar os recursos prontos para uso do SSIS para lidar com a importação de tipos BLOB.
Fluxo de controle
Você vai querer 1 a 2 variáveis definidas dependendo de sua abordagem. Ambos serão tipos de dados de string. Eu criei
SourceFolder
e CurrentFileName
. O primeiro define de onde os arquivos virão e é usado em qualquer uma das abordagens. Este último é usado no ForEach Loop Container para capturar o arquivo "atual". Fluxo de dados
Para fazer o fluxo de dados funcionar, você precisará obter a lista totalmente qualificada de nomes de arquivos adicionados ao pipeline. A maneira mais fácil é usar uma Transformação de Script, atuando como fonte e ter que adicionar todos os arquivos que atendem à sua condição (*.xml).
Contêiner de Loop Foreach
Configurar como tal
Coleção
Mapeamentos de Variáveis
Executar Tarefa SQL
Configurar assim
Fonte do script
Esta tarefa adicionará os arquivos disponíveis ao fluxo de dados. Nota menor, isso percorrerá subpastas que diferem de como configuramos o Foreach. É uma simples mudança no terceiro parâmetro (ou omissão) para torná-lo apenas de nível superior.
Identifique sua variável para que ela esteja disponível na tarefa de script
Adicione as colunas de saída apropriadas. Seus comprimentos podem variar de acordo com seu ambiente.
Script aqui
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 transformação de coluna
Configure assim
Anote o ID aqui
Amarre esse ID de volta à coluna com o nome
Destino OLE DB
Configurar. Não suporta a opção Fast Load.
Referência
Belo post sobre como usar a Import Column Transformation