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
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
O gatilho DML é um tipo especial de procedimento armazenado que entra em vigor automaticamente quando ocorre um evento DML (linguagem de manipulação de dados) que afeta a tabela ou exibição definida no gatilho. Os eventos DML incluem INSERT, UPDATEou DELETE declarações. Os gatilhos DML podem ser usados para impor regras de negócios e integridade de dados, consultar outras tabelas e incluir instruções Transact-SQL complexas. O gatilho e a instrução que o aciona são tratados como uma única transação, que pode ser revertida de dentro do gatilho. Se for detetado um erro grave (por exemplo, espaço em disco insuficiente), toda a transação será revertida automaticamente.
Benefícios
Os gatilhos DML são semelhantes às restrições, pois podem impor a integridade da entidade ou a integridade do domínio. Em geral, a integridade da entidade deve ser sempre imposta no nível mais baixo por índices que fazem parte das restrições PRIMARY KEY e UNIQUE ou que são criados de forma independente de restrições. A integridade do domínio deve ser imposta por meio CHECK de restrições, e a integridade referencial (RI) deve ser imposta por meio FOREIGN KEY de restrições. Os gatilhos DML são mais úteis quando os recursos suportados por restrições não podem atender às necessidades funcionais do aplicativo.
A lista a seguir compara gatilhos DML com restrições e identifica quando gatilhos DML têm benefícios sobre restrições.
Os gatilhos DML podem cascatar alterações através de tabelas relacionadas no banco de dados; no entanto, essas alterações podem ser executadas de forma mais eficiente usando restrições de integridade referencial em cascata.
FOREIGN KEYAs restrições podem validar um valor de coluna somente com uma correspondência exata com um valor em outra coluna, a menos que aREFERENCEScláusula defina uma ação referencial em cascata.Eles podem proteger contra operações mal-intencionadas ou incorretas
INSERT,UPDATEeDELETE, além de impor outras restrições que são mais complexas do que aquelas definidas comCHECK.Ao contrário das
CHECKrestrições, os disparadores DML podem fazer referência a colunas em outras tabelas. Por exemplo, um gatilho pode usar umSELECTde outra tabela para comparar com os dados inseridos ou atualizados e executar outras ações, como modificar os dados ou exibir uma mensagem de erro definida pelo usuário.Eles podem avaliar o estado de uma tabela antes e depois de uma modificação de dados e tomar ações com base nessa diferença.
Vários gatilhos DML do mesmo tipo (
INSERT,UPDATE, ouDELETE) em uma tabela permitem que várias ações diferentes ocorram em resposta à mesma instrução de modificação.As restrições podem comunicar-se sobre erros apenas através de mensagens de erro padronizadas do sistema. Se seu aplicativo requer ou pode se beneficiar de mensagens personalizadas e tratamento de erros mais complexos, você deve usar um gatilho.
Os gatilhos DML podem não permitir ou reverter alterações que violem a integridade referencial, cancelando assim a tentativa de modificação de dados. Esse gatilho pode entrar em vigor quando você altera uma chave estrangeira e o novo valor não corresponde à sua chave primária. No entanto, as
FOREIGN KEYrestrições são geralmente usadas para este fim.Se existirem restrições na tabela de gatilho, elas serão verificadas após a execução do
INSTEAD OFgatilho, mas antes da execução doAFTERgatilho. Se as restrições forem violadas, asINSTEAD OFações disparadoras serão revertidas e o disparadorAFTERnão será executado.
Tipos de disparadores DML
APÓS o gatilho
AFTER Os gatilhos são executados depois que a ação da instrução INSERT, UPDATE, MERGE ou DELETE é executada.
AFTER Os gatilhos nunca são executados se ocorrer uma violação de restrição. Portanto, esses gatilhos não podem ser usados para qualquer processamento que possa evitar violações de restrição. Para cada INSERT, UPDATEou DELETE ação especificada em uma MERGE instrução, o gatilho correspondente é disparado para cada operação DML.
EM VEZ DE GATILHO
INSTEAD OF Os gatilhos substituem as ações padrão da instrução de acionamento. Portanto, eles podem ser usados para executar a verificação de erros ou valores em uma ou mais colunas e executar outras ações antes de inserir, atualizar ou excluir a linha ou linhas. Por exemplo, quando o valor que está sendo atualizado em uma coluna de salário por hora em uma tabela de folha de pagamento excede um valor especificado, um gatilho pode ser definido para produzir uma mensagem de erro e reverter a transação ou inserir um novo registro em uma trilha de auditoria antes de inserir o registro na tabela de folha de pagamento. A principal vantagem dos INSTEAD OF gatilhos é que eles permitem exibições que não seriam atualizáveis para oferecer suporte a atualizações. Por exemplo, uma exibição baseada em várias tabelas base deve usar um INSTEAD OF gatilho para dar suporte a inserções, atualizações e exclusões que fazem referência a dados em mais de uma tabela. Outra vantagem dos INSTEAD OF gatilhos é que eles permitem codificar a lógica que pode rejeitar partes de um lote enquanto permite que outras partes de um lote tenham êxito.
Esta tabela compara a funcionalidade dos AFTER e INSTEAD OF gatilhos.
| Função |
AFTER disparador |
INSTEAD OF disparador |
|---|---|---|
| Aplicabilidade | Tabelas | Tabelas e vistas |
| Quantidade por tabela ou exibição | Múltiplos por ação desencadeante (UPDATE, DELETE, e INSERT) |
Um por ação desencadeadora (UPDATE, DELETE, e INSERT) |
| Referências em cascata | Não se aplicam restrições |
INSTEAD OF UPDATE e DELETE triggers não são permitidos em tabelas que são alvo de restrições de integridade referencial em cascata. |
| Execução | Depois: Processamento de restrições Ações referenciais declarativas inserted e deleted criação de tabelasA ação desencadeadora |
Antes: Processamento de restrições Em vez de: A ação desencadeadora Depois da criação das tabelas inserted e deleted |
| Ordem de execução | A primeira e a última execução podem ser especificadas | Não aplicável |
varchar(max), nvarchar(max) e varbinary(max), referências de coluna em tabelas inserted e deleted |
Permitido | Permitido |
referências de colunas text, ntext e image em inserted tabelas e deleted tabelas |
Não permitido | Permitido |
Gatilho CLR
Um gatilho do Common Language Runtime (CLR) pode ser um AFTER ou um INSTEAD OF. Um gatilho CLR também pode ser um gatilho DDL (Data Definition Language). Em vez de executar o procedimento armazenado Transact-SQL, um gatilho CLR executa um ou mais métodos escritos em código gerido que são membros de um assembly criado no .NET Framework e carregado no SQL Server.
Tarefas relacionadas
| Tarefa | Artigo |
|---|---|
| Descreve como criar um gatilho DML. | Criar disparadores DML |
| Descreve como criar um gatilho CLR. | Criar gatilhos CLR |
| Descreve como criar um gatilho DML para lidar com modificações de dados de linha única e de várias linhas. | Criar gatilhos DML para lidar com várias linhas de dados |
| Descreve como aninhar gatilhos. | Criar gatilhos aninhados |
Descreve como especificar a ordem na qual AFTER os gatilhos são acionados. |
Especificar primeiro e último gatilhos |
| Descreve como usar as tabelas especiais inseridas e excluídas no código de gatilho. | Usar as tabelas inseridas e excluídas |
| Descreve como modificar ou renomear um gatilho DML. | Modificar ou renomear gatilhos DML |
| Descreve como exibir informações sobre gatilhos DML. | Obter Informações Sobre os Triggers DML |
| Descreve como excluir ou desabilitar gatilhos DML. | Excluir ou desativar gatilhos DML |
| Descreve como gerenciar a segurança do gatilho. | Gerenciar a segurança do gatilho |