Como Desativar/Ativar todas as Triggers de um Banco de Dados Firebird
Hoje um amigo me pediu umas dicas para recuperar um banco de dados, e no final ele precisava desativar todas as Triggers para transferir os dados para um novo banco, pesquisamos um pouco na internet e conseguimos montar os códigos:
Para desativar
SELECT 'ALTER TRIGGER ' || Trim(RDB$TRIGGER_NAME) || ' INACTIVE;' FROM RDB$TRIGGERS WHERE RDB$TRIGGER_SOURCE IS NOT NULL
Para ativar
SELECT 'ALTER TRIGGER ' || Trim(RDB$TRIGGER_NAME) || ' ACTIVE;' FROM RDB$TRIGGERS WHERE RDB$TRIGGER_SOURCE IS NOT NULL
Este código, vai gerar as instruções SQL para desativar/ativar todas as Triggers de todas as Tabelas.
Atenção
Estou usando a função Trim, disponível no Firebird 2.1 e acho que também no 2.0, sei que não tem no Firebird 1.5.x ou anteriores, mas não tem problema, se você uma versão que não suporta o Trim, basta remover que o código vai funcionar também, o Trim é apenas para melhorar a estética do resultado.

setembro 11th, 2009 at 09:03
E ai, muito boa a dica… só que você não trocou ali “Para Desativar” estão nos dois exemplos…
abraços
setembro 11th, 2009 at 09:19
@Renato, obrigado pelo aviso, já corrigi.
setembro 24th, 2009 at 18:42
Oi, gostaria de saber como desativar apenas uma trigger, de uma determinada tabela. Obrigada.
setembro 24th, 2009 at 18:54
@Juciany:
O comando para desativar apenas uma trigger no Firebird ou Interbase é:
‘ALTER TRIGGER NOME_DA_TRIGGER INACTIVE’.
e para ativar novamente:
‘ALTER TRIGGER NOME_DA_TRIGGER ACTIVE’.
setembro 28th, 2009 at 09:22
Obrigada pela resposta Cesar, mas desta maneira eu já tentei e qdo executo a query (SQLDesativaTrigger.ExecSQL) ele trava, será q estou fazendo algo errado? Uso fire e Delphi 7.