Partilhar via


Criar gatilhos DML

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Este artigo descreve como criar um gatilho Transact-SQL Data Manipulation Language (DML) 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 pode ser descarregado da página inicial de Exemplos e Projetos da Comunidade do Microsoft SQL Server.

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

Pode utilizar um dos seguintes métodos:

Utilize SQL Server Management Studio

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

  2. Expanda Bancos de dados, expanda o AdventureWorks2025 banco de dados, expanda Tabelas e, em seguida, expanda a tabela Purchasing.PurchaseOrderHeader.

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

  4. No menu Consulta , selecione Especificar valores para parâmetros de modelo. Como alternativa, você pode pressionar (Ctrl-Shift-M) para abrir a caixa de diálogo Especificar valores para parâmetros de modelo .

  5. Na caixa de diálogo Especificar valores para parâmetros de modelo , insira os seguintes valores para os parâmetros mostrados.

    Parâmetro Valor
    Autor O teu nome
    Data de Criação Data de hoje
    Descrição Verifica a classificação de crédito do fornecedor antes de permitir que uma nova ordem de compra com o fornecedor seja inserida.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Remova UPDATE e DELETE 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 esta 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.

Utilize o Transact-SQL

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

  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 como antes. O gatilho é válido para inserções de várias linhas e linhas únicas, 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;