Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment exécuter le package SSIS lorsqu'un fichier est arrivé dans le dossier

La façon dont je l'ai fait dans le passé est avec un package de boucle infinie appelé à partir de SQL Server Agent, par exemple ;

Voici mon package de boucle infinie :

Définissez 3 variables :

IsFileExists - Booléen - 0

FolderLocation - String - C:\Où le fichier doit être placé\

IsFileExists Booléen - 0

Pour le conteneur de boucle For :

Définissez le IsFileExists variables comme ci-dessus.

Configurez une tâche de script C# avec ReadOnlyVariable en tant que User::FolderLocation et avoir les éléments suivants :

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

Ce que cela fera, c'est essentiellement garder un œil sur l'emplacement du dossier pour un fichier .txt, si le fichier n'y est pas, il dormira pendant 10 secondes (vous pouvez augmenter cela si vous le souhaitez). Si le fichier existe, il se terminera et le package exécutera alors le package de chargement. Cependant, il continuera à s'exécuter, donc la prochaine fois qu'un fichier y sera déposé, il exécutera à nouveau le package de chargement.

Assurez-vous d'exécuter ce package de boucle éternelle en tant que travail d'agent de serveur sql afin qu'il s'exécute tout le temps, nous avons un package similaire en cours d'exécution et il n'a jamais causé de problèmes.

Assurez-vous également que votre package d'entrée déplace/archive le fichier hors de l'emplacement du dossier de dépôt.