Megosztás a következőn keresztül:


DML-eseményindítók létrehozása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a cikk azt ismerteti, hogyan hozhat létre Transact-SQL Adatkezelési nyelv (DML) eseményindítót az SQL Server Management Studióval vagy a Transact-SQL CREATE TRIGGER utasítással.

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

Korlátozások

A DML-eseményindítók létrehozásával kapcsolatos korlátozások és korlátozások listáját a CREATE TRIGGER című témakörben találja.

Engedélyek

Engedélyre van szükség ALTER azon a táblán vagy nézeten, amelyen az eseményindító létrejön.

DML-eseményindító létrehozása

Az alábbi módszereket használhatja:

Az SQL Server Management Studio használata

  1. Object Explorer-ben csatlakozzon az Adatbázis-motor egy példányához, majd bontsa ki azt.

  2. Bontsa ki az Adatbázisok elemet, bontsa ki az adatbázistAdventureWorks2025, bontsa ki a Táblák elemet, majd bontsa ki a táblátPurchasing.PurchaseOrderHeader.

  3. Kattintson a jobb gombbal az Eseményindítókelemre, majd válassza Új eseményindítólehetőséget.

  4. A Lekérdezés menüben válassza A sablonparaméterek értékeinek megadásalehetőséget. Másik lehetőségként a (Ctrl-Shift-M) billentyűkombinációt lenyomva megnyithatja a Sablonparaméterek értékeinek megadása párbeszédpanelt.

  5. A Sablonparaméterek értékeinek megadása párbeszédpanelen adja meg a következő értékeket a megjelenített paraméterekhez.

    Paraméter Érték
    Szerző Az Ön neve
    Létrehozás dátuma Mai dátum
    Leírás Ellenőrzi a szállítói hitelminősítést, mielőtt új beszerzési rendelést szúrhat be a szállítóval.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Távolítsa el és UPDATE vegye ki DELETE a listából.
  6. Kattintson az OK gombra.

  7. A Lekérdezésszerkesztőbencseréld le a megjegyzést -- Insert statements for trigger here a következő utasításra:

    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. A szintaxis érvényességének ellenőrzéséhez válassza a Lekérdezés menü Elemzés elemét. Ha hibaüzenetet ad vissza, hasonlítsa össze az utasítást az előző kódblokkdal, javítsa ki szükség szerint, és ismételje meg ezt a lépést.

  9. A DML-eseményindító létrehozásához a Lekérdezés menüben válassza a Végrehajtás lehetőséget. A DML-eseményindító objektumként jön létre az adatbázisban.

  10. Az Object Explorerben felsorolt DML-eseményindító megtekintéséhez kattintson a jobb gombbal Eseményindítók elemre, és válassza a Frissítéslehetőséget.

Használd a Transact-SQL-t

  1. Object Explorer-ben csatlakozzon az Adatbázis-motor egy példányához, majd bontsa ki azt.

  2. A Fájl menüben válassza az Új lekérdezés lehetőséget.

  3. Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza az Végrehajtás lehetőséget. Ez a példa ugyanazt a tárolt DML-eseményindítót hozza létre, mint korábban. Az eseményindító érvényes a többhelyes és az egysoros beszúrásokra, és optimális az egysoros beszúrásokhoz.

    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;