Company insights

การสร้าง Trigger ใน SQL Server


Trigger ใน SQL Server เป็นกลไกที่ช่วยให้ฐานข้อมูลสามารถทำงานบางอย่างได้โดยอัตโนมัติ
เมื่อมีการเปลี่ยนแปลงข้อมูลในตาราง เช่น การเพิ่มข้อมูล (INSERT)
การแก้ไขข้อมูล (UPDATE) หรือการลบข้อมูล (DELETE)
โดย Trigger มักถูกใช้สำหรับบันทึกประวัติการเปลี่ยนแปลงข้อมูล (Audit Log)
หรือใช้ตรวจสอบเงื่อนไขก่อนหรือหลังการเปลี่ยนแปลงข้อมูล

โครงสร้างการสร้าง Trigger


CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT, UPDATE, DELETE
AS
BEGIN

  -- คำสั่ง SQL ที่ต้องการให้ทำงาน

END


Trigger สามารถกำหนดให้ทำงานกับเหตุการณ์ได้หลายแบบ เช่น
INSERT, UPDATE หรือ DELETE พร้อมกัน

ตารางพิเศษที่ใช้ใน Trigger


ใน SQL Server จะมีตารางพิเศษที่ใช้ภายใน Trigger ได้แก่


  • inserted เก็บข้อมูลใหม่ที่ถูกเพิ่มเข้ามาหรือข้อมูลใหม่หลังการแก้ไข

  • deleted เก็บข้อมูลเดิมก่อนถูกลบหรือก่อนถูกแก้ไข

ตัวอย่างตารางข้อมูล


CREATE TABLE products (
   id INT IDENTITY(1,1),
   product_name VARCHAR(100),
   price DECIMAL(10,2)
)

สร้างตารางสำหรับเก็บ Log


CREATE TABLE products_log (
   id INT,
   product_name VARCHAR(100),
   price DECIMAL(10,2),
   action_type VARCHAR(10),
   action_date DATETIME
)

ตัวอย่าง Trigger สำหรับ INSERT, UPDATE และ DELETE


CREATE TRIGGER trg_products_audit
ON products
AFTER INSERT, UPDATE, DELETE
AS
BEGIN

   -- กรณี INSERT
   IF EXISTS (SELECT * FROM inserted) AND NOT EXISTS (SELECT * FROM deleted)
   BEGIN
       INSERT INTO products_log
       SELECT id, product_name, price, 'INSERT', GETDATE()
       FROM inserted
   END

   -- กรณี UPDATE
   IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
   BEGIN
       INSERT INTO products_log
       SELECT id, product_name, price, 'UPDATE', GETDATE()
       FROM inserted
   END

   -- กรณี DELETE
   IF NOT EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
   BEGIN
       INSERT INTO products_log
       SELECT id, product_name, price, 'DELETE', GETDATE()
       FROM deleted
   END

END

คำอธิบายการทำงาน


  • INSERT จะอ่านข้อมูลจากตาราง inserted

  • UPDATE จะมีข้อมูลทั้งใน inserted และ deleted

  • DELETE จะอ่านข้อมูลจากตาราง deleted

ทดสอบการทำงานของ Trigger


INSERT INTO products(product_name, price)
VALUES ('Keyboard', 500)

UPDATE products
SET price = 550
WHERE id = 1

DELETE FROM products
WHERE id = 1


เมื่อรันคำสั่งเหล่านี้ ข้อมูลจะถูกบันทึกลงในตาราง products_log
เพื่อเก็บประวัติการเปลี่ยนแปลงข้อมูล

สรุป


Trigger ใน SQL Server ช่วยให้ระบบสามารถทำงานอัตโนมัติเมื่อข้อมูลในตารางถูกเพิ่ม แก้ไข หรือถูกลบ
โดยมักใช้สำหรับบันทึก Log ตรวจสอบข้อมูล หรือควบคุมเงื่อนไขของระบบ
การใช้งาน Trigger อย่างเหมาะสมจะช่วยเพิ่มความปลอดภัยและความถูกต้องของข้อมูลในระบบฐานข้อมูล