Partilhar via


Gatilhos DML

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase 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 KEY As restrições podem validar um valor de coluna somente com uma correspondência exata com um valor em outra coluna, a menos que a REFERENCES cláusula defina uma ação referencial em cascata.

  • Eles podem proteger contra operações mal-intencionadas ou incorretas INSERT, UPDATE e DELETE, além de impor outras restrições que são mais complexas do que aquelas definidas com CHECK.

    Ao contrário das CHECK restrições, os disparadores DML podem fazer referência a colunas em outras tabelas. Por exemplo, um gatilho pode usar um SELECT de 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, ou DELETE) 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 KEY restriçõ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 OF gatilho, mas antes da execução do AFTER gatilho. Se as restrições forem violadas, as INSTEAD OF ações disparadoras serão revertidas e o disparador AFTER nã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 tabelas

A 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.

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