Как выполнить пакет служб SSIS при поступлении файла в папку

требование заключается в выполнении пакета служб SSIS, когда файл поступает в папку, я не хочу запускать пакет вручную .

Он не уверен в времени прибытия файла, также файлы могут поступать несколько раз .Когда когда-либо файлы прибыли, это должно загрузить в таблицу.Я думаю, что некоторые решения, такие как задача file watcher ,все еще ожидают запуска пакета

4 ответов


способ, которым я сделал это в прошлом, - это пакет бесконечного цикла, вызываемый, например, из агента SQL Server;

Это мой пакет бесконечного цикла:

Simple Package

Установить 3 Переменные:

IsFileExists-Boolean-0

FolderLocation-строка - C:\Where файл должен быть помещен в\

IsFileExists Boolean-0

для контейнера цикла For:

For Loop Container

установить Переменные IsFileExists, как указано выше.

настройте задачу скрипта C# с ReadOnlyVariable как User::FolderLocation и выполните следующие действия:

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

то, что это будет делать, по существу, следить за местоположением папки для a .txt-файл, если файла нет, он будет спать в течение 10 секунд (вы можете увеличить это, если хотите). Если файл существует, он будет завершен, и пакет затем выполнит пакет загрузки. Однако он будет продолжать работать, поэтому в следующий раз файл отброшено в нем, снова выполнит пакет загрузки.

убедитесь, что этот пакет foreverloop запущен как задание агента sql server, поэтому он будет работать все время, у нас есть аналогичный пакет, и он никогда не вызывал никаких проблем.

также убедитесь,что ваш входной пакет перемещает / архивирует файл из расположения папки drop.


Как уже предлагали другие, использование задачи WMI или бесконечного цикла-это два варианта для достижения этого, но SSIS IMO является ресурсоемким. Если вы позволяете пакету постоянно работать в фоновом режиме, это может съедают много памяти, процессора и вызывают проблемы с производительностью с другими пакетами в зависимости от того, сколько других пакетов вы работаете. Поэтому другой вариант, который вы можете рассмотреть, - запланировать работу агента каждые 5 минут или 10 минут или что-то еще и вызвать свой пакет работа. Настройте пакет для продолжения только в том случае, если файл существует или завершается иначе.


можно создать службу Windows, использующую WMI для обнаружения прибытия файлов и запуска пакетов. Подробности о том, как расположены здесь: http://msbimentalist.wordpress.com/2012/04/27/trigger-ssis-package-when-files-available-in-a-folder-part2/?relatedposts_exclude=330