Partilhar via


Especificar primeiro e último gatilhos

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

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 acionamento INSERT, DELETE e UPDATE. Os gatilhos AFTER que são disparados entre o primeiro e o último gatilhos são executados em 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 acionado para uma ação de acionamento.
Última Especifica que o gatilho DML é o último gatilho AFTER a ser disparado para uma ação desencadeadora.
Nenhum Especifica que não há uma ordem específica na qual o gatilho DML deve ser acionado. Usado principalmente para redefinir um gatilho para que não seja nem o primeiro nem o último.

O exemplo a seguir mostra o uso de 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 os gatilhos INSERT, UPDATE e DELETE definidos nela ao mesmo tempo. Cada tipo de instrução pode ter seus próprios primeiros e últimos gatilhos, mas eles não podem ser os mesmos.

Se o primeiro ou o último gatilho definido para uma tabela não abranger uma ação de acionamento, como não cobrir FOR UPDATE, FOR DELETE ou FOR INSERT, não haverá o primeiro ou o último gatilho para as ações ausentes.

Os gatilhos INSTEAD OF não podem ser especificados como primeiro ou último. Em vez disso, os gatilhos são acionados 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 qualquer gatilho AFTER definido na tabela seja acionado. Por exemplo, se um gatilho INSTEAD OF INSERT em um modo de exibição insere dados em uma tabela base e a própria tabela base 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 disparados 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á descartado e o valor da ordem será definido como Nenhum. A ordem deve ser redefinida usando sp_settriggerorder.

A função OBJECTPROPERTY relata se um gatilho é um primeiro ou último gatilho usando as seguintes propriedades: ExecIsFirstInsertTrigger, ExecIsFirstUpdateTrigger, ExecIsFirstDeleteTrigger, ExecIsLastInsertTrigger, ExecIsLastUpdateTriggere ExecIsLastDeleteTrigger.

A replicação gera automaticamente um primeiro gatilho para qualquer tabela incluída numa atualização imediata ou numa assinatura de atualização em fila. A replicação requer que seu gatilho seja o primeiro gatilho. A replicação gera um erro quando você tenta incluir uma tabela com um primeiro gatilho em uma atualização imediata ou atualização em fila. Se tentar definir um trigger como o primeiro depois de uma tabela ter sido incluída numa subscrição, sp_settriggerorder devolverá um erro. Se utilizares ALTER no gatilho de replicação ou o comando sp_settriggerorder para alterar o gatilho de replicação para um gatilho final ou nenhum, a subscrição não funcionará corretamente.

Ver também

OBJECTPROPERTY (Transact-SQL)
sp_settriggerorder (Transact-SQL)