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

Como executar o pacote SSIS quando um arquivo chega à pasta


A maneira como fiz isso no passado é com um pacote de loop infinito chamado do SQL Server Agent, por exemplo;

Este é o meu pacote de loop infinito:



Conjunto de 3 variáveis:

IsFileExists - Boolean - 0

FolderLocation - String - C:\Onde o arquivo deve ser colocado\

IsFileExists Boolean - 0

Para o contêiner For Loop:



Defina o IsFileExists variáveis ​​como acima.

Configure uma tarefa de script C# com ReadOnlyVariable como User::FolderLocation e tem o seguinte:
 public void Main()
    {
        int fileCount = 0;
        string[] FilesToProcess;
        while (fileCount == 0)
        {
            try
            {

                System.Threading.Thread.Sleep(10000);
                FilesToProcess = System.IO.Directory.GetFiles(Dts.Variables["FolderLocation"].Value.ToString(), "*.txt");
                fileCount = FilesToProcess.Length;

                if (fileCount != 0)
                {
                    for (int i = 0; i < fileCount; i++)
                    {
                        try
                        {

                            System.IO.FileStream fs = new System.IO.FileStream(FilesToProcess[i], System.IO.FileMode.Open);
                            fs.Close();

                        }
                        catch (System.IO.IOException ex)
                        {
                            fileCount = 0;
                            continue;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // TODO: Add your code here
        Dts.TaskResult = (int)ScriptResults.Success;
    }
}
}

O que isso fará é essencialmente ficar de olho no local da pasta para um arquivo .txt, se o arquivo não estiver lá, ele ficará suspenso por 10 segundos (você pode aumentar isso se quiser). Se o arquivo existir, ele será concluído e o pacote executará o pacote de carregamento. No entanto, ele continuará a ser executado, portanto, da próxima vez que um arquivo for inserido, ele executará o pacote de carregamento novamente.

Certifique-se de executar este pacote de loop para sempre como um trabalho de agente do servidor sql para que ele seja executado o tempo todo, temos um pacote semelhante em execução e nunca causou nenhum problema.

Além disso, certifique-se de que seu pacote de entrada mova/arquive o arquivo para fora do local da pasta de destino.