Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Pode especificar que um dos triggers AFTER associados a uma tabela seja o primeiro trigger AFTER ou o último trigger AFTER a ser acionado para cada uma das ações que acionam o trigger: 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 INSERT, UPDATE e DELETE disparadores definidos na mesma tabela. 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 último gatilho definido para uma tabela não cobrir uma ação de disparo, como não cobrir FOR UPDATE, FOR DELETE, ou FOR INSERT, não existe o primeiro nem o último gatilho para as ações em falta.
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 sobre uma vista inserir dados numa tabela de base e a própria tabela de base contiver um gatilho INSTEAD OF INSERT e três gatilhos AFTER INSERT, o gatilho INSTEAD OF INSERT na tabela de base é disparado em vez da ação de inserção, e os gatilhos AFTER na tabela de base são disparados após qualquer ação de inserção na tabela de base. Para obter mais informações, consulte DML Triggers.
Se uma instrução ALTER TRIGGER alterar um primeiro ou último accionador, o atributo First ou Last é removido e o valor da ordem é definido como None. 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.