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". ![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190332.png)
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).
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190367.png)
Contêiner de Loop Foreach
Configurar como tal
Coleção
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190370.png)
Mapeamentos de Variáveis
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190387.png)
Executar Tarefa SQL
Configurar assim
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190393.png)
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190354.png)
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
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190466.png)
Adicione as colunas de saída apropriadas. Seus comprimentos podem variar de acordo com seu ambiente.
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190424.png)
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
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190416.png)
Anote o ID aqui
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190492.png)
Amarre esse ID de volta à coluna com o nome
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190446.png)
Destino OLE DB
Configurar. Não suporta a opção Fast Load.
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190411.png)
![](http://www.sqldat.com/article/uploadfiles/202205/2022052518190441.png)
Referência
Belo post sobre como usar a Import Column Transformation