Alternativas a triggers

Criando e Otimizando Triggers no SQL Server

Florin Angelescu

Instructor

Triggers vs. stored procedures

Triggers

  • Disparadas automaticamente por um evento
-- Vai disparar um trigger de INSERT
INSERT INTO Orders [...];
  • Não aceitam parâmetros nem transações
  • Não podem retornar valores como saída

Stored procedures

  • Executadas apenas quando chamadas explicitamente
-- Vai executar a stored procedure
EXECUTE sp_DailyMaintenance;
  • Aceitam parâmetros de entrada e transações
  • Podem retornar valores como saída
Criando e Otimizando Triggers no SQL Server

Triggers vs. stored procedures

Triggers

Usadas para:

  • auditoria
  • imposição de integridade

Stored procedures

Usadas para:

  • tarefas gerais
  • necessidades específicas do usuário
Criando e Otimizando Triggers no SQL Server

Triggers vs. colunas calculadas

Triggers

  • calcular valores de colunas
  • usar colunas de outras tabelas nos cálculos
  • INSERT ou UPDATE usados para calcular
    -- Usado no corpo do trigger
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Colunas calculadas

  • calcular valores de colunas
  • usar colunas apenas da mesma tabela nos cálculos
  • cálculo definido na criação da tabela
    -- Definição da coluna
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Criando e Otimizando Triggers no SQL Server

Exemplo de coluna calculada

CREATE TABLE [SalesWithPrice]
(
    [OrderID] INT IDENTITY(1,1),
    [Customer] NVARCHAR(50),
    [Product] NVARCHAR(50),
    [Price] DECIMAL(10,2),
    [Currency] NVARCHAR(3),
    [Quantity] INT,
    [OrderDate] DATE DEFAULT (GETDATE()),
    [TotalAmount] AS [Quantity] * [Price]
);
Criando e Otimizando Triggers no SQL Server

Usando um trigger como coluna calculada

CREATE TRIGGER [SalesCalculateTotalAmount]
ON [SalesWithoutPrice]
AFTER INSERT
AS
    UPDATE [sp]
    SET [sp].[TotalAmount] = [sp].[Quantity] * [p].[Price]
    FROM [SalesWithoutPrice] AS [sp]
    INNER JOIN [Products] AS [p] ON [sp].Product = [p].[Product]
    WHERE [sp].[TotalAmount] IS NULL;
Criando e Otimizando Triggers no SQL Server

Vamos comparar na prática!

Criando e Otimizando Triggers no SQL Server

Preparing Video For Download...