Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

inserir arquivo XML no SQL via SSIS


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