Share via


Criar gatilhos DML

Este tópico descreve como criar um gatilho DML Transact-SQL usando o SQL Server Management Studio e a declaração Transact-SQL CREATE TRIGGER.

Antes de começar

Limitações e restrições

Para obter uma lista de limitações e restrições relacionada a criar 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:

  • SQL Server Management Studio

  • Transact-SQL

Usando o SQL Server Management Studio

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

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

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

  4. No menu Consulta, clique em Especificar Valores para Parâmetros de Modelo. Outra alternativa é pressionar (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

    Your name

    Data de criação

    Today's date

    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

    Purchasing

    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.

[Início]

Usando Transact-SQL

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

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

[Início]