Partilhar via


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.

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados e expanda-a.

  2. Expanda Bancos de Dados, expanda o banco de dados AdventureWorks2022 , expanda Tabelas e expanda a tabela Purchasing.PurchaseOrderHeader.

  3. Clique com o botão direito do mouse em Gatilhose selecione Novo Gatilho.

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

  5. 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.
  6. Clique em OK.

  7. 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;  
    
  8. 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.

  9. Para criar o gatilho DML, no menu Consulta , clique em Executar. O gatilho DML é criado como um objeto no banco de dados.

  10. Para ver o gatilho DML listado no Pesquisador de Objetos, clique com o botão direito do mouse em Gatilhos e selecione Atualizar.

Antes de começar

Usando o Transact-SQL

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados e expanda-a.

  2. No menu Arquivo , clique em Nova Consulta.

  3. 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;