Criar gatilhos DML
Este tópico descreve como criar um gatilho DML Transact-SQL usando SQL Server Management Studio e usando a instrução CREATE TRIGGER do Transact-SQL.
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, consulte 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 uma das seguintes opções:
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 AdventureWorks2012 , expanda Tabelas e expanda a tabela Purchaseing.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 A 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 AdventureWorks2012; 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;