Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode especificar que um dos gatilhos AFTER associados a uma tabela seja o primeiro gatilho AFTER ou o último gatilho AFTER acionado para cada ação de gatilho INSERT, DELETE e UPDATE. Os gatilhos AFTER, que são disparados entre o gatilho inicial e o final, são executados numa ordem indefinida.
Para especificar a ordem de um gatilho do tipo AFTER, use o procedimento armazenado sp_settriggerorder. sp_settriggerorder tem as seguintes opções.
| Opção | Descrição |
|---|---|
| Primeira | Especifica que o gatilho DML é o primeiro gatilho AFTER disparado para uma ação de gatilho. |
| última | Especifica que o gatilho do tipo DML é o último gatilho do tipo AFTER ativado para a ação de ativação. |
| Nenhum | Especifica que não há nenhuma ordem específica na qual o gatilho DML deve ser acionado. Usado principalmente para redefinir um gatilho, retirando-o dos estados de primeiro ou último. |
O exemplo a seguir mostra como usar sp_settriggerorder:
sp_settriggerorder @triggername = 'MyTrigger', @order = 'first', @stmttype = 'UPDATE'
Importante
O primeiro e o último gatilhos devem ser dois gatilhos DML diferentes.
Uma tabela pode ter gatilhos INSERT, UPDATE e DELETE definidos nela ao mesmo tempo. Cada tipo de instrução pode ter seus próprios gatilhos primeiro e último, mas eles não devem ser os mesmos gatilhos.
Se o primeiro ou o último gatilho definido para uma tabela não abranger uma ação de gatilho, como não abranger FOR UPDATE, FOR DELETE ou FOR INSERT, não haverá um primeiro ou último gatilho para as ações ausentes.
Não é possível especificar gatilhos INSTEAD OF como o primeiro ou o último gatilho. Em vez disso, os gatilhos OF são disparados antes que as atualizações sejam feitas nas tabelas subjacentes. Se as atualizações forem feitas por um gatilho INSTEAD OF para tabelas subjacentes, as atualizações ocorrerão antes que os gatilhos AFTER definidos na tabela sejam acionados. Por exemplo, se um gatilho INSTEAD OF INSERT em uma exibição inserir dados em uma tabela base e a tabela base em si contiver um gatilho INSTEAD OF INSERT e três gatilhos AFTER INSERT, o gatilho INSTEAD OF INSERT na tabela base será acionado em vez da ação de inserção e os gatilhos AFTER na tabela base serão acionados após qualquer ação de inserção na tabela base. Para obter mais informações, consulte DML Triggers.
Se uma instrução ALTER TRIGGER alterar um primeiro ou último gatilho, o atributo First ou Last será removido e o valor da ordem será definido como Nenhum. A ordem deve ser redefinida usando sp_settriggerorder.
A função OBJECTPROPERTY informa se um gatilho é um primeiro ou último gatilho usando as propriedades ExecIsFirstTrigger e ExecIsLastTrigger.
A replicação gera automaticamente um primeiro gatilho para qualquer tabela incluída em uma assinatura de atualização imediata ou atualização na fila. A replicação exige que seu gatilho seja o primeiro gatilho. A replicação gera um erro quando você tenta incluir uma tabela com um trigger inicial em uma assinatura com atualização imediata ou em fila. Se você tentar definir um gatilho como o primeiro após uma tabela ter sido incluída em uma assinatura, sp_settriggerorder retornará um erro. Se você usar ALTER no gatilho de replicação ou usar sp_settriggerorder para alterar o gatilho de replicação para um gatilho último ou nenhum, a assinatura não funcionará corretamente.
Consulte Também
OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)