Как выполнить пакет служб SSIS при поступлении файла в папку
требование заключается в выполнении пакета служб SSIS, когда файл поступает в папку, я не хочу запускать пакет вручную .
Он не уверен в времени прибытия файла, также файлы могут поступать несколько раз .Когда когда-либо файлы прибыли, это должно загрузить в таблицу.Я думаю, что некоторые решения, такие как задача file watcher ,все еще ожидают запуска пакета
4 ответов
способ, которым я сделал это в прошлом, - это пакет бесконечного цикла, вызываемый, например, из агента SQL Server;
Это мой пакет бесконечного цикла:
Установить 3 Переменные:
IsFileExists-Boolean-0
FolderLocation-строка - C:\Where файл должен быть помещен в\
IsFileExists Boolean-0
для контейнера цикла For:
установить Переменные 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