sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo ejecutar el paquete SSIS cuando llega un archivo a la carpeta

La forma en que hice esto en el pasado es con un paquete de bucle infinito llamado desde el Agente SQL Server, por ejemplo;

Este es mi paquete de bucle infinito:

Establecer 3 Variables:

IsFileExists - Booleano - 0

FolderLocation - Cadena - C:\Dónde se colocará el archivo\

IsFileExists Booleano - 0

Para el contenedor For Loop:

Establecer el IsFileExists variables como arriba.

Configure una tarea de secuencia de comandos C# con ReadOnlyVariable como User::FolderLocation y tiene lo siguiente:

 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;
    }
}
}

Lo que esto hará es esencialmente vigilar la ubicación de la carpeta para un archivo .txt, si el archivo no está allí, se suspenderá durante 10 segundos (puede aumentar esto si lo desea). Si el archivo existe, se completará y el paquete ejecutará el paquete de carga. Sin embargo, continuará ejecutándose, por lo que la próxima vez que se suelte un archivo, se ejecutará el paquete de carga nuevamente.

Asegúrese de ejecutar este paquete de bucle eterno como un trabajo de agente de servidor sql para que se ejecute todo el tiempo, tenemos un paquete similar ejecutándose y nunca ha causado ningún problema.

Además, asegúrese de que su paquete de entrada mueva/archive el archivo lejos de la ubicación de la carpeta de entrega.