Criar gatilhos DML
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Este tópico descreve como criar um gatilho DML Transact-SQL usando o SQL Server Management Studio e a instrução Transact-SQL CREATE TRIGGER.
Antes de começar
Limitações e Restrições
Para obter uma lista de limitações e restrições relacionadas à criação de gatilhos DML, veja CREATE TRIGGER (Transact-SQL).
Permissões
Exige a permissão ALTER na tabela ou exibição na qual o gatilho é criado.
Como criar um gatilho DML
Você pode usar um dos itens a seguir:
Como usar o SQL Server Management Studio.
No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados e expanda-a.
Expanda Bancos de Dados, expanda o banco de dados
AdventureWorks2022
, expanda Tabelas e expanda a tabela Purchasing.PurchaseOrderHeader.Clique com o botão direito do mouse em Gatilhose selecione Novo Gatilho.
No menu Consulta , clique em Especificar Valores para Parâmetros de Modelo. Como alternativa, pressione (Ctrl-Shift-M) para abrir caixa de diálogo Especificar Valores para Parâmetros de Modelo .
Na caixa de diálogo Especificar Valores para Parâmetros de Modelo , digite os seguintes valores para os parâmetros mostrados.
Parâmetro Valor Autor Seu nome Data de criação Data de hoje Descrição Verifica a avaliação de crédito de fornecedor antes de permitir uma nova ordem de compra com o fornecedor a ser inserido. Schema_Name Compra Trigger_Name NewPODetail2 Table_Name PurchaseOrderDetail Data_Modification_Statement Remova UPDATE e DELETE da lista. Clique em OK.
No Editor de Consultas, substitua o comentário
-- Insert statements for trigger here
pela seguinte instrução:IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;
Para verificar se a sintaxe é válida, no menu Consulta , clique em Analisar. Se uma mensagem de erro for retornada, compare a instrução com as informações acima e corrija conforme necessário. Repita esta etapa.
Para criar o gatilho DML, no menu Consulta , clique em Executar. O gatilho DML é criado como um objeto no banco de dados.
Para ver o gatilho DML listado no Pesquisador de Objetos, clique com o botão direito do mouse em Gatilhos e selecione Atualizar.
Usando o Transact-SQL
No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados e expanda-a.
No menu Arquivo , clique em Nova Consulta.
Copie e cole o exemplo a seguir na janela de consulta e clique em Executar. Este exemplo cria o mesmo gatilho DML armazenado como anteriormente.
-- Trigger valid for multirow and single row inserts -- and optimal for single row inserts. USE AdventureWorks2022; GO CREATE TRIGGER NewPODetail3 ON Purchasing.PurchaseOrderDetail FOR INSERT AS IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;