Sdílet prostřednictvím


Vytváření triggerů DML

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Tento článek popisuje, jak vytvořit trigger DML (Transact-SQL Data Manipulation Language) pomocí aplikace SQL Server Management Studio nebo příkaz Transact-SQL CREATE TRIGGER .

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

Omezení

Seznam omezení a omezení souvisejících s vytvářením triggerů DML najdete v tématu CREATE TRIGGER.

Dovolení

Vyžaduje ALTER oprávnění k tabulce nebo zobrazení, na kterém se trigger vytváří.

Vytvoření triggeru DML

Můžete použít jednu z následujících metod:

Použití aplikace SQL Server Management Studio

  1. V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.

  2. Rozbalte položku Databáze, rozbalte AdventureWorks2025 databázi, rozbalte položku Tabulky a potom rozbalte tabulku Purchasing.PurchaseOrderHeader.

  3. Klepněte pravým tlačítkem myši na Triggerya pak vyberte Nový trigger.

  4. V nabídce dotazu vyberte Zadat hodnoty pro parametry šablony. Můžete také stisknout (Ctrl-Shift-M) a otevřít dialogové okno Zadat hodnoty pro parametry šablony.

  5. V dialogovém okně Zadat hodnoty parametrů šablony zadejte následující hodnoty pro zobrazené parametry.

    Parametr Hodnota
    autora vaše jméno
    Vytvořit datum dnešní datum
    Description Zkontroluje rating dodavatele před povolením vložení nové nákupní objednávky s dodavatelem.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Odeberte UPDATE a DELETE ze seznamu.
  6. Vyberte OK.

  7. V editoru dotazů nahraďte komentář -- Insert statements for trigger here následujícím příkazem:

    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. Pokud chcete ověřit platnost syntaxe, vyberte v nabídce Dotaz možnost Parsovat. Pokud se vrátí chybová zpráva, porovnejte příkaz s předchozím blokem kódu, opravte ho podle potřeby a opakujte tento krok.

  9. Pokud chcete vytvořit trigger DML, v nabídce Dotaz vyberte Spustit. Trigger DML se vytvoří jako objekt v databázi.

  10. Pokud chcete zobrazit trigger DML uvedený v Průzkumníku objektů, klikněte pravým tlačítkem na Triggery a vyberte Aktualizovat.

Použijte Transact-SQL

  1. V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.

  2. V nabídce Soubor vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tento příklad vytvoří stejnou uloženou aktivační událost DML jako předtím. Aktivační událost je platná pro vložení více řádků a jeden řádek a je optimální pro vložení s jedním řádkem.

    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;