Bekende beperkingen van triggers

Triggers in SQL Server bouwen en optimaliseren

Florin Angelescu

Instructor

Voordelen van triggers

  • Voor databasetoegankelijkheid
  • Leg bedrijfsregels vast in de database
  • Beperk welke statements zijn toegestaan
  • Complexe logica starten met één event
  • Eenvoudige manier om database en acties te auditen
Triggers in SQL Server bouwen en optimaliseren

Nadelen van triggers

  • Moeilijk te zien en te vinden
  • Onzichtbaar voor clients of tijdens debuggen
  • Logica lastig te volgen bij troubleshooten
  • Kan server-overhead veroorzaken en vertragen
Triggers in SQL Server bouwen en optimaliseren

Server-level triggers vinden

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           |...|
Triggers in SQL Server bouwen en optimaliseren

Database- en tabeltriggers vinden

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                     |
Triggers in SQL Server bouwen en optimaliseren

Triggerdefinitie bekijken (optie 1)

Triggerdefinitie bekijken in 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);
Triggers in SQL Server bouwen en optimaliseren

Triggerdefinitie bekijken (optie 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); |
Triggers in SQL Server bouwen en optimaliseren

Triggerdefinitie bekijken (optie 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); |
Triggers in SQL Server bouwen en optimaliseren

Triggerdefinitie bekijken (optie 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); |
Triggers in SQL Server bouwen en optimaliseren

Best practices voor triggers

Tips:

  • goed gedocumenteerd databasemodel
  • eenvoudige logica in triggerontwerp
  • vermijd overmatig gebruik van triggers
Triggers in SQL Server bouwen en optimaliseren

Laten we oefenen!

Triggers in SQL Server bouwen en optimaliseren

Preparing Video For Download...