Limiti noti dei trigger

Creare e ottimizzare i trigger in SQL Server

Florin Angelescu

Instructor

Vantaggi dei trigger

  • Usati per l’integrità del database
  • Applicano le regole di business direttamente nel database
  • Controllano quali istruzioni sono consentite nel database
  • Implementano logica di business complessa attivata da un singolo evento
  • Semplice modo per fare audit di database e azioni utente
Creare e ottimizzare i trigger in SQL Server

Svantaggi dei trigger

  • Difficili da visualizzare e rilevare
  • Invisibili alle applicazioni client o durante il debug
  • Logica difficile da seguire in fase di troubleshooting
  • Possono gravare sul server e rallentarlo
Creare e ottimizzare i trigger in SQL Server

Trovare i trigger a livello server

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           |...|
Creare e ottimizzare i trigger in SQL Server

Trovare i trigger di database e tabella

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                     |
Creare e ottimizzare i trigger in SQL Server

Visualizzare la definizione di un trigger (opzione 1)

Visualizza definizione trigger da 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);
Creare e ottimizzare i trigger in SQL Server

Visualizzare la definizione di un trigger (opzione 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); |
Creare e ottimizzare i trigger in SQL Server

Visualizzare la definizione di un trigger (opzione 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); |
Creare e ottimizzare i trigger in SQL Server

Visualizzare la definizione di un trigger (opzione 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); |
Creare e ottimizzare i trigger in SQL Server

Best practice per i trigger

Suggerimenti:

  • progettazione del database ben documentata
  • logica semplice nel design dei trigger
  • evita l’uso eccessivo dei trigger
Creare e ottimizzare i trigger in SQL Server

Ayo berlatih!

Creare e ottimizzare i trigger in SQL Server

Preparing Video For Download...