Вместо использования xp_cmdshell я сделал так:
Когда определенное значение в таблице изменяется, триггер использует msdb.sp_start_job для запуска задания. Это задание не должно выполняться по расписанию, а только по инициативе пользователя. Я установил расписание заданий на однократное выполнение, которое теперь в прошлом, и снял флажок «Включено».
Это задание состоит из одного шага: DTSRun /~Z0xHEXENCRYPTEDVALUE. Пакет DTS копирует некоторые строки с этого сервера на другой сервер на другой платформе и в случае успеха сбрасывает значения в таблице с помощью триггера для следующего раза. Триггер проверяет значение таблицы перед вызовом процедуры sp_start_job, чтобы задание запускалось только при определенных условиях, а не каждый раз.
Поскольку процедура sp_start_job выполняется асинхронно, триггер завершается быстро. Единственным недостатком этого является то, что мне нужно опросить значение, которое было сброшено в случае успеха, и либо сообщить пользователю, что оно сработало, либо через некоторое время оно не сработало.
Альтернативой может быть использование xp_cmdshell, если мне нужна синхронная работа, что может быть не очень хорошей идеей внутри триггера.
person
Bratch
schedule
13.11.2008