Các thay thế cho trigger

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Florin Angelescu

Instructor

Trigger so với stored procedure

Trigger

  • Kích hoạt tự động bởi một sự kiện
-- Sẽ kích hoạt trigger INSERT
INSERT INTO Orders [...];
  • Không hỗ trợ tham số hoặc giao dịch
  • Không trả về giá trị đầu ra

Stored procedure

  • Chỉ chạy khi được gọi tường minh
-- Sẽ chạy stored procedure
EXECUTE sp_DailyMaintenance;
  • Nhận tham số đầu vào và hỗ trợ giao dịch
  • Có thể trả về giá trị đầu ra
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Trigger so với stored procedure

Trigger

Dùng cho:

  • kiểm toán
  • đảm bảo toàn vẹn

Stored procedure

Dùng cho:

  • tác vụ chung
  • nhu cầu theo người dùng
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Trigger so với cột tính toán

Trigger

  • tính giá trị cột
  • dùng cột từ bảng khác để tính
  • dùng INSERT hoặc UPDATE để tính
    -- Dùng trong thân trigger
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Cột tính toán

  • tính giá trị cột
  • chỉ dùng cột trong cùng bảng để tính
  • phép tính được định nghĩa khi tạo bảng
    -- Định nghĩa cột
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ví dụ về cột tính toán

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]
);
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Dùng trigger như cột tính toán

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;
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Hãy so sánh trong thực tế!

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Preparing Video For Download...