Limites connues des déclencheurs

Création et optimisation de déclencheurs dans SQL Server

Florin Angelescu

Instructor

Avantages des déclencheurs

  • Utilisés pour l'intégrité de la base de données
  • Appliquer les règles d'affaires directement dans la base
  • Contrôler les instructions permises dans une base
  • Mettre en œuvre une logique d'affaires complexe déclenchée par un seul événement
  • Façon simple d'auditer les bases et les actions des utilisateurs
Création et optimisation de déclencheurs dans SQL Server

Inconvénients des déclencheurs

  • Difficiles à voir et à détecter
  • Invisibles pour les applications clientes ou lors du débogage
  • Logique difficile à suivre en dépannage
  • Peuvent surcharger le serveur et le ralentir
Création et optimisation de déclencheurs dans SQL Server

Repérer les déclencheurs au niveau serveur

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           |...|
Création et optimisation de déclencheurs dans SQL Server

Repérer les déclencheurs de base et de table

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                     |
Création et optimisation de déclencheurs dans SQL Server

Afficher une définition de déclencheur (option 1)

Afficher la définition du déclencheur dans 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);
Création et optimisation de déclencheurs dans SQL Server

Afficher une définition de déclencheur (option 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); |
Création et optimisation de déclencheurs dans SQL Server

Afficher une définition de déclencheur (option 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); |
Création et optimisation de déclencheurs dans SQL Server

Afficher une définition de déclencheur (option 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); |
Création et optimisation de déclencheurs dans SQL Server

Pratiques exemplaires pour les déclencheurs

Conseils :

  • conception de base bien documentée
  • logique simple dans la conception des déclencheurs
  • éviter de trop utiliser les déclencheurs
Création et optimisation de déclencheurs dans SQL Server

Passons à la pratique !

Création et optimisation de déclencheurs dans SQL Server

Preparing Video For Download...