Compartilhar via


Criar gatilhos DML

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

Este artigo descreve como criar um gatilho DML (linguagem de manipulação de dados) Transact-SQL com o SQL Server Management Studio ou a instrução Transact-SQL CREATE TRIGGER .

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que você pode baixar na página inicial Microsoft SQL Server Samples and Community Projects.

Limitações

Para obter uma lista de limitações e restrições relacionadas à criação de gatilhos DML, consulte CREATE TRIGGER.

Permissões

Requer ALTER permissão na tabela ou exibição na qual o gatilho está sendo criado.

Como criar um gatilho DML

É possível usar um dos seguintes métodos:

Utilize 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 AdventureWorks2025 banco de dados, 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 , selecione 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
    Author Seu nome
    Criar Data 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 Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Remova UPDATE e DELETE remova da lista.
  6. Selecione 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 , selecione Analisar. Se uma mensagem de erro for retornada, compare a instrução com o bloco de código anterior, corrija conforme necessário e repita essa etapa.

  9. Para criar o gatilho DML, no menu Consulta , selecione 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.

Usar 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 , selecione Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e selecione Executar. Este exemplo cria o mesmo gatilho DML armazenado de antes. O gatilho é válido para inserções de linhas múltiplas e simples e ideal para inserções de linha única.

    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;