Úvod

Tvorba a optimalizace triggerů v SQL Serveru

Florin Angelescu

Instructor

Co je trigger?

  • Speciální typ uložené procedury
  • Spustí se při výskytu události na databázovém serveru

Jak funguje trigger

Tvorba a optimalizace triggerů v SQL Serveru

Typy triggerů (podle příkazů T-SQL)

  • Triggery jazyka DML (Data Manipulation Language)
    • Příkazy INSERT, UPDATE nebo DELETE
  • Triggery jazyka DDL (Data Definition Language)
    • Příkazy CREATE, ALTER nebo DROP
  • Přihlašovací triggery
    • Události LOGON
Tvorba a optimalizace triggerů v SQL Serveru

Typy triggerů (podle chování)

  • Trigger AFTER

    • Původní příkaz se provede
    • Následně se spustí další příkazy
  • Příklady použití

    • Přebudování indexu po velkém vložení dat
    • Upozornění správce při aktualizaci dat
Tvorba a optimalizace triggerů v SQL Serveru

Typy triggerů (podle chování)

  • Trigger INSTEAD OF

    • Původní příkaz se neprovede
    • Místo něj se spustí náhradní příkaz
  • Příklady použití

    • Blokování vkládání
    • Blokování aktualizací
    • Blokování mazání
    • Blokování úprav objektů
    • Upozornění správce
Tvorba a optimalizace triggerů v SQL Serveru

Definice triggeru (s AFTER)

-- Create the trigger by giving it a descriptive name
CREATE TRIGGER ProductsTrigger

-- The trigger needs to be attached to a table ON Products
-- The trigger behavior type AFTER INSERT
-- The beginning of the trigger workflow AS
-- The action executed by the trigger PRINT ('An insert of data was made in the Products table.');
Tvorba a optimalizace triggerů v SQL Serveru

Definice triggeru (s INSTEAD OF)

-- Create the trigger by giving it a descriptive name
CREATE TRIGGER PreventDeleteFromOrders
-- The trigger needs to be attached to a table
ON Orders
-- The trigger behavior type
INSTEAD OF DELETE
-- The beginning of the trigger workflow
AS
-- The action executed by the trigger
PRINT ('You are not allowed to delete rows from the Orders table.');
Tvorba a optimalizace triggerů v SQL Serveru

AFTER vs. INSTEAD OF

CREATE TRIGGER MyFirstAfterTrigger
ON Table1
-- Triggered after 
-- the firing event (UPDATE)
AFTER UPDATE
AS
{trigger_actions_section};
CREATE TRIGGER MyFirstInsteadOfTrigger
ON Table2
-- Triggered instead of 
-- the firing event (UPDATE)
INSTEAD OF UPDATE
AS
{trigger_actions_section};
Tvorba a optimalizace triggerů v SQL Serveru

Lass uns üben!

Tvorba a optimalizace triggerů v SQL Serveru

Preparing Video For Download...