Cazuri de utilizare pentru triggerele INSTEAD OF (DML)

Crearea și optimizarea triggerelor în SQL Server

Florin Angelescu

Instructor

Utilizare generală a triggerelor INSTEAD OF

  • Prevenirea operațiunilor
  • Controlul instrucțiunilor din baza de date
  • Asigurarea integrității datelor
Crearea și optimizarea triggerelor în SQL Server

Triggere care previn modificările

CREATE TRIGGER PreventProductChanges
ON Products
INSTEAD OF UPDATE
AS
    RAISERROR ('Updates of products are not permitted.
                Contact the database administrator if a change is needed.', 16, 1);
Crearea și optimizarea triggerelor în SQL Server

Triggere care previn și notifică

CREATE TRIGGER PreventCustomersRemoval
ON Customers
INSTEAD OF DELETE
AS
    DECLARE @EmailBodyText NVARCHAR(50) =
                       (SELECT 'User "' + ORIGINAL_LOGIN() +
                        '" tried to remove a customer from the database.');

    RAISERROR ('Customer entries are not subject to removal.', 16, 1);

    EXECUTE SendNotification @RecipientEmail = '[email protected]'
                              ,@EmailSubject = 'Suspicious database behavior'
                              ,@EmailBody = @EmailBodyText;
Crearea și optimizarea triggerelor în SQL Server

Triggere cu logică condițională

CREATE TRIGGER ConfirmStock
ON Orders
INSTEAD OF INSERT
AS
    IF EXISTS (SELECT * FROM Products AS p
               INNER JOIN inserted AS i ON i.Product = p.Product
               WHERE p.Quantity < i.Quantity)
        RAISERROR ('You cannot place orders when there is no product stock.', 16, 1);
    ELSE
        INSERT INTO dbo.Orders (Customer, Product, Quantity, OrderDate, TotalAmount)
        SELECT Customer, Product, Quantity, OrderDate, TotalAmount FROM inserted;
Crearea și optimizarea triggerelor în SQL Server

Triggere cu logică condițională

Logică condițională pentru triggere

Crearea și optimizarea triggerelor în SQL Server

Să exersăm!

Crearea și optimizarea triggerelor în SQL Server

Preparing Video For Download...