Eu tenho uma solução para isso, no entanto, não é elegante. Isso funciona, mas é um golpe e nunca seria considerado uma "melhor prática".
A solução envolve o uso de erros gerados artificialmente para controlar o fluxo e ajustar as propriedades do pacote para que a condição geral de erro do job de chamada relate sucesso ou falha da maneira que desejaríamos.
Primeiro, crie uma tarefa Executar Instrução T-SQL com sua verificação condicional. Do exemplo na pergunta original, seria assim:
if not exists (select * from sys.database_mirroring where mirroring_role = 1)
begin
raiserror('not primary', 16, 1)
end
Este código gera um erro se este não for o primário do espelhamento e nenhum erro se for o primário. Em seguida, crie a segunda tarefa Execute T-SQL Statement e vincule-a à primeira com uma condição Success. Se este não for o espelho primário, não iremos para esta segunda tarefa, e a sequência terminará. Se este for o principal, prosseguiremos para esta segunda tarefa. A segunda tarefa gera um erro fictício usando código como este:
raiserror('dummy error', 16, 1)
Agora, crie sua terceira tarefa e vincule-a à segunda com uma condição de falha. Nesta terceira tarefa, faça o que você deseja fazer se a condição na primeira tarefa for verdadeira. Isso pode ser outra declaração Execute T-SQL, uma tarefa de backup, uma tarefa de atualização de estatísticas ou o que for. Se a condição for falsa, deixaremos a sequência após a primeira tarefa. Se a condição fosse verdadeira, passaríamos pelo erro fictício e seguiríamos para essa terceira tarefa que realmente faz o trabalho que queremos fazer.
A razão para o erro fictício na tarefa 2 é tornar o estado de erro final do relatório de trabalho chamador o que queremos, e há algumas outras propriedades do pacote que também precisamos ajustar para que isso funcione. Vá para a janela de propriedades (se ela não estiver aberta, abra-a no menu do botão direito em qualquer uma das tarefas) e clique na lista suspensa na parte superior. Isso lista todos os elementos do plano de manutenção para os quais você pode alterar as propriedades. Clique em Subplan_1 Sequence, em que Subplan_1 é o nome do subplano em que você está trabalhando. Altere FailParentOnFailure para False. Isso evitará que o trabalho de chamada relate um erro quando gerarmos o erro condicional na tarefa 1 ou o erro simulado na tarefa 2. Em seguida, vá para as propriedades do Pacote MyPackage, em que MyPackage é o nome do pacote em que você está trabalhando. MaximumErrorCount para 2. Isso fará com que o trabalho de chamada relate o sucesso quando houver apenas um erro gerado pelo erro simulado na tarefa 2, mas relatará falha se a terceira tarefa também gerar um erro. Ele também relatará sucesso se o único erro gerado for pela verificação condicional na tarefa 1.
É isso, espero que alguém ache isso útil.