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