ทางเลือกอื่นแทน Trigger

การสร้างและปรับแต่ง Trigger ใน SQL Server

Florin Angelescu

Instructor

Triggers เทียบกับ Stored Procedures

Triggers

  • ทำงานอัตโนมัติเมื่อเกิด event
-- Will fire an INSERT trigger
INSERT INTO Orders [...];
  • ไม่รับพารามิเตอร์หรือ transaction
  • ไม่สามารถคืนค่าเป็น output ได้

Stored procedures

  • ทำงานเมื่อถูกเรียกใช้เท่านั้น
-- Will run the stored procedure
EXECUTE sp_DailyMaintenance;
  • รับพารามิเตอร์และ transaction ได้
  • สามารถคืนค่าเป็น output ได้
การสร้างและปรับแต่ง Trigger ใน SQL Server

Triggers เทียบกับ Stored Procedures

Triggers

ใช้สำหรับ:

  • การตรวจสอบ (auditing)
  • การบังคับใช้ integrity

Stored procedures

ใช้สำหรับ:

  • งานทั่วไป
  • ความต้องการเฉพาะผู้ใช้
การสร้างและปรับแต่ง Trigger ใน SQL Server

Triggers เทียบกับ Computed Columns

Triggers

  • คำนวณค่าคอลัมน์
  • ใช้คอลัมน์จากตารางอื่นในการคำนวณได้
  • ใช้ INSERT หรือ UPDATE เพื่อคำนวณ
    -- Used in the trigger body
    [...]
    UPDATE
    SET TotalAmount = Price * Quantity
    [...]
    

Computed columns

  • คำนวณค่าคอลัมน์
  • ใช้คอลัมน์เฉพาะในตารางเดียวกันเท่านั้น
  • กำหนดสูตรคำนวณตอนสร้างตาราง
    -- Column definition
    [...]
    TotalAmount AS Price * Quantity
    [...]
    
การสร้างและปรับแต่ง Trigger ใน SQL Server

ตัวอย่าง Computed Column

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]
);
การสร้างและปรับแต่ง Trigger ใน SQL Server

การใช้ Trigger แทน Computed Column

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;
การสร้างและปรับแต่ง Trigger ใน SQL Server

มาเปรียบเทียบในทางปฏิบัติกันเถอะ!

การสร้างและปรับแต่ง Trigger ใน SQL Server

Preparing Video For Download...