Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eseguire il pacchetto SSIS quando un file arriva alla cartella

Il modo in cui l'ho fatto in passato è stato con un pacchetto di loop infinito chiamato da SQL Server Agent, ad esempio;

Questo è il mio pacchetto loop infinito:

Imposta 3 variabili:

IsFileExists - Booleano - 0

FolderLocation - String - C:\Dove deve essere inserito il file\

IsFileExists Booleano - 0

Per il contenitore For Loop:

Imposta IsFileExists variabili come sopra.

Imposta un'attività di script C# con ReadOnlyVariable come User::FolderLocation e avere quanto segue:

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

Ciò che farà essenzialmente è tenere d'occhio la posizione della cartella per un file .txt, se il file non è lì dormirà per 10 secondi (puoi aumentarlo se lo desideri). Se il file esiste, verrà completato e il pacchetto eseguirà il caricamento del pacchetto. Tuttavia continuerà a essere eseguito, quindi la prossima volta che un file viene rilasciato, eseguirà nuovamente il pacchetto di caricamento.

Assicurati di eseguire questo pacchetto in ciclo continuo come un lavoro dell'agente del server sql in modo che funzioni sempre, abbiamo un pacchetto simile in esecuzione e non ha mai causato problemi.

Inoltre, assicurati che il tuo pacchetto di input sposti/archivi il file lontano dalla posizione della cartella di rilascio.