Criando e Otimizando Triggers no SQL Server
Florin Angelescu
Instructor
CREATE TRIGGER MyFirstAfterTrigger
ON Table1
-- Disparado após
-- o evento de disparo (UPDATE)
AFTER UPDATE
AS
{trigger_actions_section};
CREATE TRIGGER MyFirstInsteadOfTrigger
ON Table2
-- Disparado em vez de
-- o evento de disparo (UPDATE)
INSTEAD OF UPDATE
AS
{trigger_actions_section};
Gatilho AFTER
O evento inicial dispara o gatilho
O evento inicial é executado
As ações do gatilho são executadas

Gatilho INSTEAD OF
O evento inicial dispara o gatilho
O evento inicial não é mais executado
As ações do gatilho são executadas

CREATE TRIGGER SalesNewInfoTrigger ON Sales AFTER INSERT ASEXEC sp_cleansing @Table = 'Sales';EXEC sp_generateSalesReport;EXEC sp_sendnotification;
| Brand | Model | Power | Stock |
|-------|----------|-------|-------|
| Ecco | Standard | 30W | 30 |
| Miry | Buma | 45W | 0 |
| Lume | Ultra | 50W | 0 |
CREATE TRIGGER BulbsStockTrigger
ON Bulbs
INSTEAD OF INSERT
AS
| Brand | Model | Power | Stock |
|-------|----------|-------|-------|
| Ecco | Standard | 30W | 30 |
| Miry | Buma | 50W | 100 |
| Lume | Ultra | 52W | 100 |
CREATE TRIGGER BulbsStockTrigger ON Bulbs INSTEAD OF INSERT ASIF EXISTS (SELECT * FROM Bulbs AS b INNER JOIN inserted AS i ON b.Brand = i.Brand AND b.Model = i.Model WHERE b.Stock = 0) BEGIN UPDATE b SET b.Power = i.Power, b.Stock = i.Stock FROM Bulbs AS b INNER JOIN inserted AS i ON b.Brand = i.Brand AND b.Model = i.Model WHERE b.Stock = 0 END
| Brand | Model | Power | Stock |
|-------|----------|-------|-------|
| Ecco | Standard | 30W | 30 |
| Miry | Buma | 50W | 100 |
| Lume | Ultra | 52W | 100 |
| Ecco | Standard | 35W | 100 |
-- A primeira parte foi truncada por motivos de espaço
IF EXISTS (SELECT * FROM Bulbs AS b
INNER JOIN inserted AS i
ON b.Brand = i.Brand
AND b.Model = i.Model
WHERE b.Stock = 0)
BEGIN
UPDATE b
SET b.Power = i.Power,
b.Stock = i.Stock
FROM Bulbs AS b
INNER JOIN inserted AS i
ON b.Brand = i.Brand
AND b.Model = i.Model
WHERE b.Stock = 0
END
ELSE
INSERT INTO Bulbs
SELECT * FROM inserted;
Criando e Otimizando Triggers no SQL Server