ข้อจำกัดที่ทราบของ trigger

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

Florin Angelescu

Instructor

ข้อดีของ trigger

  • ใช้เพื่อรักษาความสมบูรณ์ของฐานข้อมูล
  • บังคับใช้กฎทางธุรกิจโดยตรงในฐานข้อมูล
  • ควบคุมว่าคำสั่งใดได้รับอนุญาตในฐานข้อมูล
  • รองรับตรรกะทางธุรกิจที่ซับซ้อนซึ่งเกิดจากเหตุการณ์เดียว
  • วิธีที่ง่ายในการตรวจสอบฐานข้อมูลและการกระทำของผู้ใช้
การสร้างและปรับแต่ง Trigger ใน SQL Server

ข้อเสียของ trigger

  • ดูและตรวจจับได้ยาก
  • มองไม่เห็นจากแอปพลิเคชัน client หรือขณะดีบักโค้ด
  • ติดตามตรรกะได้ยากเมื่อแก้ไขปัญหา
  • อาจเป็นภาระต่อเซิร์ฟเวอร์และทำให้ทำงานช้าลง
การสร้างและปรับแต่ง Trigger ใน SQL Server

ค้นหา trigger ระดับเซิร์ฟเวอร์

SELECT * FROM sys.server_triggers;
| name                 | parent_class_desc | create_date | is_disabled |...|
|----------------------|-------------------|-------------|-------------|---|
| DenyNewDatabases     | SERVER            | 2019-01-22  | 0           |...|
| DenyNewLinkedServers | SERVER            | 2019-01-22  | 1           |...|
| DenyDatabaseDelete   | SERVER            | 2019-01-22  | 1           |...|
การสร้างและปรับแต่ง Trigger ใน SQL Server

ค้นหา trigger ระดับฐานข้อมูลและตาราง

SELECT * FROM sys.triggers;
| name                   | parent_class_desc | create_date | is_disabled | is_instead_of_trigger |
|----------------------|-------------------|-------------|---------------|-----------------------|
| TrackRetiredProducts   | OBJECT_OR_COLUMN  | 2019-04-19  | 0           | 0                     |
| PreventOrdersUpdate    | OBJECT_OR_COLUMN  | 2019-04-22  | 0           | 1                     |
| TrackDatabaseTables    | DATABASE          | 2019-04-23  | 0           | 0                     |
| KeepCanceledOrders     | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 0                     |
| DiscountsPreventDelete | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventNewDiscounts    | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventTableDeletion   | DATABASE          | 2019-04-27  | 0           | 0                     |
การสร้างและปรับแต่ง Trigger ใน SQL Server

ดูนิยามของ trigger (ตัวเลือก 1)

ดูนิยาม Trigger จาก SSMS

CREATE TRIGGER PreventOrdersUpdate
ON Orders
INSTEAD OF UPDATE
AS
RAISERROR ('Updates on "Orders" table
            are not permitted.
            Place a new order
            to add new products.', 16, 1);
การสร้างและปรับแต่ง Trigger ใน SQL Server

ดูนิยามของ trigger (ตัวเลือก 2)

SELECT definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID ('PreventOrdersUpdate');
| definition                                                   |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
การสร้างและปรับแต่ง Trigger ใน SQL Server

ดูนิยามของ trigger (ตัวเลือก 3)

SELECT OBJECT_DEFINITION (OBJECT_ID ('PreventOrdersUpdate'));
| (No column name)                                             |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
การสร้างและปรับแต่ง Trigger ใน SQL Server

ดูนิยามของ trigger (ตัวเลือก 4)

EXECUTE sp_helptext @objname = 'PreventOrdersUpdate';
| Text                                                         |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
การสร้างและปรับแต่ง Trigger ใน SQL Server

แนวทางปฏิบัติที่ดีสำหรับ trigger

เคล็ดลับ:

  • ออกแบบฐานข้อมูลให้มีเอกสารประกอบที่ดี
  • ใช้ตรรกะที่เรียบง่ายในการออกแบบ trigger
  • หลีกเลี่ยงการใช้ trigger มากเกินไป
การสร้างและปรับแต่ง Trigger ใน SQL Server

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

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

Preparing Video For Download...