การใช้งาน DML trigger

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

Florin Angelescu

Instructor

ทำไมต้องใช้ DML trigger?

  • เริ่มต้นการทำงานเมื่อมีการจัดการข้อมูล
  • ป้องกันการจัดการข้อมูล
  • ติดตามการเปลี่ยนแปลงข้อมูลหรือออบเจกต์ในฐานข้อมูล
  • ตรวจสอบผู้ใช้และรักษาความปลอดภัยของฐานข้อมูล
การสร้างและปรับแต่ง Trigger ใน SQL Server

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

เลือกระหว่าง AFTER กับ INSTEAD OF

AFTER trigger

อีเวนต์เริ่มต้นเรียก trigger

อีเวนต์เริ่มต้นถูกประมวลผล

การทำงานของ trigger ถูกประมวลผล

การทำงานของ AFTER Trigger

INSTEAD OF trigger

อีเวนต์เริ่มต้นเรียก trigger

อีเวนต์เริ่มต้นไม่ถูกประมวลผลอีกต่อไป

การทำงานของ trigger ถูกประมวลผล

การทำงานของ INSTEAD OF Trigger

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

ตัวอย่างการใช้งาน AFTER trigger

  • มีการแทรกข้อมูลลงในตารางยอดขาย
  • เริ่มกระบวนการทำความสะอาดข้อมูล
  • สร้างรายงานตารางพร้อมผลลัพธ์
  • แจ้งเตือนผู้ดูแลฐานข้อมูล
CREATE TRIGGER SalesNewInfoTrigger
ON Sales
AFTER INSERT
AS

EXEC sp_cleansing @Table = 'Sales';
EXEC sp_generateSalesReport;
EXEC sp_sendnotification;
การสร้างและปรับแต่ง Trigger ใน SQL Server

ตัวอย่างการใช้งาน INSTEAD OF trigger

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

ตัวอย่างการใช้งาน INSTEAD OF trigger

| Brand | Model    | Power | Stock |
|-------|----------|-------|-------|
| Ecco  | Standard | 30W   | 30    |
| Miry  | Buma     | 50W   | 100   |
| Lume  | Ultra    | 52W   | 100   |
  • กำลังไฟมีการเปลี่ยนแปลงในบางรุ่น
  • อัปเดตเฉพาะสินค้าที่ไม่มีสต็อก
CREATE TRIGGER BulbsStockTrigger
ON Bulbs
INSTEAD OF INSERT
AS

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

ตัวอย่างการใช้งาน INSTEAD OF trigger

| Brand | Model    | Power | Stock |
|-------|----------|-------|-------|
| Ecco  | Standard | 30W   | 30    |
| Miry  | Buma     | 50W   | 100   |
| Lume  | Ultra    | 52W   | 100   |
| Ecco  | Standard | 35W   | 100   |
  • กำลังไฟมีการเปลี่ยนแปลงในบางรุ่น
  • อัปเดตเฉพาะสินค้าที่ไม่มีสต็อก
  • เพิ่มแถวใหม่สำหรับสินค้าที่มีสต็อก
-- First part was truncated for spacing reasons
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;
การสร้างและปรับแต่ง Trigger ใน SQL Server

มาฝึกกันเถอะ!

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

Preparing Video For Download...