Как проверить передачу файлов Windows и запустить пакет служб SSIS?

Я новичок в разработке SSIS. Мне нужно запустить пакет служб SSIS после получения файла на сервер. Я выполняю следующие действия: 1. Сначала создал свой пакет служб SSIS с задачей сценария, чтобы проверить, существует ли файл. Если существует, он продолжит со следующими шагами в пакете. 2. Создано задание SSMS Schedule для запуска пакета SSIS каждые 10 минут (периодически), чтобы проверить, доступен ли файл. Поскольку нет конкретного времени, этот файл будет передан на сервер. Таким образом, это задание запланировано на 2 часа, и в этом временном окне каждые 10 минут запускается пакет служб SSIS.

Моя проблема заключается в том, что как только файл SSIS завершает процесс, как остановить запуск пакета SSIS снова? Как сообщить SSMS, что пакет уже выполнен?

Спасибо за вашу помощь SATY

2 ответа

Мой ленивый способ - обновить работу агента. Шаг 1 является задачей sql. Шаг 2 запускает пакет служб SSIS.

Шаг задания SQL выполнит запрос, используя xp_FileExists проверить наличие переданного файла.

Если файл не найден, перенесите задание на 10 минут и выйдите из отчета об успешном завершении.

Если файл найден, перейдите к шагу 2 (запустите пакет служб SSIS).

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

Мне нравится мышление billinkc, хотя я обычно против расширенных хранимых процедур (не правда ли, что они немного SQL Server 2000ish?). Я бы пошел с функцией CLR для файла существует (как функция в этой сборке).

Другой вариант, который вы можете сделать, - отключить задание в конце пакета (после загрузки файла) с помощью команды "Выполнить SQL".

EXEC msdb.dbo.sp_update_job @job_name='Your job name',@enabled = 0; 

Конечно, тогда вам нужно запланировать задание, чтобы включить его до начала следующего окна.

EXEC msdb.dbo.sp_update_job @job_name='Your job name',@enabled = 1; 
Другие вопросы по тегам