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.
Aplica-se a:SQL Server
Banco de Dados SQL do
AzureInstância
Gerenciada de SQL do AzureBanco 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 a exibição definida no gatilho. Os eventos DML incluem INSERT, UPDATE, ou DELETE instruções. 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 dispara são tratados como uma transação simples, que pode ser revertida dentro do gatilho. Se um erro grave for detectado (espaço em disco insuficiente, por exemplo), toda a transação será revertida automaticamente.
Benefícios
Os gatilhos DML são semelhantes a restrições, pois podem impor integridade de entidade ou integridade de domínio. Em geral, a integridade da entidade deve sempre ser imposta no nível mais baixo por índices que fazem parte das restrições PRIMARY KEY e UNIQUE ou são criados independentemente de restrições. A integridade do domínio deve ser imposta por meio CHECK de restrições e a RI (integridade referencial) deve ser imposta por meio FOREIGN KEY de restrições. Os gatilhos DML são mais úteis quando os recursos fornecidos por restrições não conseguem atender às necessidades funcionais do aplicativo.
A lista a seguir compara os gatilhos DML com as restrições e identifica quando esses gatilhos têm vantagens sobre as restrições.
Os gatilhos DML podem colocar as alterações em cascata através das tabelas relacionadas no banco de dados; no entanto, essas alterações podem ser executadas com mais eficiência utilizando restrições de integridade referencial em cascata.
FOREIGN KEYas restrições podem validar um valor de coluna apenas se for exatamente igual a um valor em outra coluna, a menos que a cláusulaREFERENCESdefina uma ação referencial em cascata.Eles podem se proteger contra operações mal-intencionadas ou incorretas
INSERT,UPDATE, eDELETEe impor outras restrições mais complexas do que as definidas com as restriçõesCHECK.Ao contrário das
CHECKrestrições, os gatilhos DML podem referenciar 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.Podem avaliar o estado de uma tabela antes e depois da modificação dos dados e efetuar ações com base nessa diferença.
Vários gatilhos DML do mesmo tipo (
INSERTouUPDATEDELETE) em uma tabela permitem que várias ações diferentes ocorram em resposta à mesma instrução de modificação.Restrições só podem comunicar erros através de mensagens de erro padronizadas do sistema. Se o aplicativo exigir ou beneficiar-se de mensagens personalizadas e tratamento de erros mais complexo, é necessário usar um gatilho.
Os gatilhos DML podem não permitir ou reverter alterações que violam a integridade referencial, cancelando 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 à chave primária. No entanto,
FOREIGN KEYas restrições geralmente são usadas para essa finalidade.Se houver restrições na tabela de gatilho, elas são verificadas após a execução do
INSTEAD OFgatilho, mas antes da execução doAFTERgatilho. Se as restrições forem violadas, as ações deINSTEAD OFgatilho serão revertidas e oAFTERgatilho não será executado.
Tipos de triggers DML
Gatilho AFTER
Os gatilhos AFTER são executados após a ação das instruções INSERT, UPDATE, MERGE ou DELETE ser realizada.
AFTER os gatilhos nunca serão executados se ocorrer uma violação de restrição. Portanto, esses gatilhos não podem ser usados para qualquer processamento que possa impedir 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.
Gatilho INSTEAD OF
Os gatilhos INSTEAD OF substituem as ações padrão da instrução de gatilho. Portanto, eles podem ser usados para executar verificação de erro ou valor em uma ou mais colunas e executar outras ações antes de inserir, atualizar ou excluir linhas ou linhas. Por exemplo, quando o valor que estiver sendo atualizado em uma coluna de salário calculado por hora, de uma tabela de folha de pagamento, exceder um valor especificado, um gatilho poderá 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 dar 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 referenciam dados em mais de uma tabela. Outra vantagem dos INSTEAD OF gatilhos é que eles permitem que você codifique a lógica que pode rejeitar partes de um lote, permitindo que outras partes de um lote tenham êxito.
Esta tabela compara a funcionalidade dos gatilhos AFTER e INSTEAD OF.
| Função | Gatilho AFTER |
Gatilho INSTEAD OF |
|---|---|---|
| Aplicabilidade | Tabelas | Tabelas e exibições |
| Quantidade por tabela ou exibição | Múltiplas por ação de gatilho (UPDATE, DELETE e INSERT) |
Uma por ação de gatilho (UPDATEe DELETEINSERT) |
| Referências em cascata | Nenhuma restrição se aplica | Os gatilhos INSTEAD OF UPDATE e DELETE não são aceitos nas tabelas que são destinos de restrições de integridade referencial em cascata. |
| Execução | Depois: Processamento da restrição Ações referenciais declarativas inserted e deleted criação de tabelasA ação de gatilho |
Antes: processamento da restrição Em vez de: a ação de gatilho Após a 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 |
referências de coluna varchar(max), nvarchar(max) e varbinary(max) nas tabelas inserted e deleted |
Permitido | Permitido |
As referências de coluna text, ntext e image nas tabelas inserted e deleted |
Não permitido | Permitido |
Gatilho CLR
Um gatilho CLR (Common Language Runtime) pode ser um gatilho AFTER ou INSTEAD OF. Um gatilho CLR também pode ser um gatilho DDL (Linguagem de Definição de Dados). Em vez de executar um procedimento armazenado Transact-SQL, um gatilho CLR executa um ou mais métodos escritos em código gerenciado 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 os gatilhos DML |
| Descreve como criar um gatilho CLR. | Criar os gatilhos CLR |
| Descreve como criar um gatilho DML para tratar modificações de dados de linha única e de várias linhas. | Criar os gatilhos DML para lidar com múltiplas linhas de dados |
| Descreve como aninhar gatilhos. | Criar os gatilhos aninhados |
Descreve como especificar a ordem na qual AFTER os gatilhos são disparados. |
Especificar o primeiro e o ú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 os gatilhos DML |
| Descreve como exibir informações sobre gatilhos DML. | Obter informações sobre os gatilhos DML |
| Descreve como excluir ou desabilitar gatilhos DML. | Excluir ou desabilitar os gatilhos DML |
| Descreve como gerenciar a segurança do gatilho. | Gerenciar a segurança do gatilho |