Home

Déclencheurs/Triggers

 

Principes de base de déclencheurs

 

Introduction aux triggers

Lorsqu'une action a été exécutée sur une table, telles que l'ajout d'un nouvel enregistrement, la modification (édition/mise à jour), l'enregistrement existant, ou la suppression d'un (ou des) produit (s) des enregistrements, la table produit une notification. Nous disons que la table déclenche un événement. Vous pouvez utiliser cet événement pour prendre certaines mesures.

Un déclencheur est une action qui est effectuée en coulisses lorsqu'un événement se produit sur une table.

Practical LearningFormation pratique : Présentation des déclencheurs

  1. Démarrez Microsoft SQL Server et la connexion pour ouvrir Microsoft SQL Server Management Studio
  2. Dans la barre d'outils standard, cliquez sur le bouton Nouvelle requête New Query
  3. Pour créer une nouvelle base de données et une table, tapez ce qui suit :
    -- ===================================================  
    -- Database:	CeilInn
    4  -- ===================================================    
     
     
    IF EXISTS(SELECT name FROM sys.databases  	
              WHERE name = N'CeilInn4b')  
    DROP DATABASE CeilInn4;  
    GO  
    CREATE DATABASE CeilInn4;  
    GO    
     
     
    USE CeilInn4;  
    GO    
     
     
    IF OBJECT_ID('Rooms', 'U') IS NOT NULL    
    DROP TABLE Rooms  
    GO   
     
     
    -- ===================================================  
    -- Database:	CeilI4  
    -- Table:	Rooms  
    -- Description:	This table is used to hold information  -
    --	            about his room rented for the hotel  -
    -- ===================================================  
    CREATE TABLE Rooms  
    (      
        RoomNumber nvarchar(10),      
        LocationCode nchar(10) default N'Silver Spring',      
        RoomType nvarchar(20) default N'Bedroom',      
        BedType nvarchar(40) default N'Queen',      
        Rate money default 85.95,      
        Available bit default 1  
    );  
    GO    
     
     
    -- ===================================================  
    -- Database: CeilInn4  
    -- Table:	 DatabaseOperations  
    -- Description: This table is used to hold information  
    --              about operations performed on any table 
    --              of the database. It specifies:
    --              a. The type of object on which the action
    --                 was performed. The types of object can 
    --                 be a table 
    --              b. The name of the table
    --              c. The name of the employee who
    --                 performed the action. 
    --              d. The action that was performed. This
    --                 can be an insert, an update, or a 
    --                 delete operation 
    --              e. The date/time the action was performed  
    --=================================================== 
    CREATE TABLE DatabaseOperations (
        ObjectType nchar(20), 
        ObjectName nvarchar(40), 
        EmployeeName nvarchar(50), 
        ActionPerformed nvarchar (50), 
        TimePerformed datetime2
    ); 
    GO
  4. Appuyez sur F5 pour exécuter

Création d'un déclencheur

Vous créez un trigger en utilisant le code SQL. Par la suite, nous allons lancer en analysant le code nécessaire pour le faire. Pour vous aider avec le code squelette, ouvrez une fenêtre de requête. Puis, dans l'Explorateur de modèle, développez le nœud de déclencheurs. Faites glisser Create T-SQL Trigger (nouveau menu) et déposez-le dans la fenêtre :

--================================================
--Template generated from Template Explorer using : 
--Create Trigger(New Menu).SQL
--
--Use the Specify Values for Template Parameters
--command  (Ctrl-Shift-M) to fill in the parameter
--values below.
--
--See additional Create Trigger templates for more
--exemples of different Trigger statements.
--
--This block of comments will not be included in 
--the definition of the function.
--================================================ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO
--=============================================
--Athor : <Author,,Name>
--Create date : < Create Date,, >
--Description : <Description,,>
--============================================= 
CREATE TRIGGER < Schema_Name, 
                 sysname, 
                 Schema_Name >. < Trigger_Name, 
                                  sysname, 
                                  Trigger_Name > 
  ON < Schema_Name, sysname, Schema_Name >. < Table_Name, sysname, Table_Name > 
  AFTER < Data_Modification_Statements, INSERT, DELETE, UPDATE > 
 AS 
 BEGIN
        --SET NOCOUNT ON added to prevent extra result sets from
        --Interfering with SELECT statements.
        SET NOCOUNT ON;
 
    --Insert statements for trigger here
 
END 
GO

L'exécution d'un déclencheur

Contrairement à une procédure stockée, vous n'aurez jamais à exécuter un déclencheur. Le système d'exploitation (par l'intermédiaire de (s) l'evénement (s)) ou les objets et le moteur de base de données s'en occupe. Un déclencheur agit dans les coulisses, lorsque l'objet auquel il est associé déclenche l'événement approprié. En fait, l'événement se déclenche si l'objet a reçu un changement ou pas (si un enregistrement a été créé, modifié ou supprimé, ou non) l.

Gestion de trigger

 

Introduction

Un déclencheur est un objet de base de données. En tant que tel, il a un nom. Il peut être modifié. Il peut également être supprimé.

Modification d'un déclencheur

Si le comportement d'un déclencheur n'est pas approprié, vous pouvez le modifier. La formule pour modifier un trigger est la suivante :

ALTER TRIGGER schema_name.trigger_name
ON schema_name.table_name
AFTER, UPDATE> 
AS
    statement

Pour obtenir le code squelette généré pour vous, ouvrez une fenêtre de requête. Dans l'Explorateur de modèles, développez le nœud de déclencheurs, faites glisser l'option modifier et déposez-le dans la fenêtre de requête :

--= =====================================
--Alter T-SQL Trigger Template
--= ===================================== 
USE < database_name, sysname, AdventureWorks > 
GO 
 
ALTER TRIGGER < schema_name, sysname, Sales >. < trigger_name, sysname, uStore > 
ON < schema_name, sysname, Sales >. <table_name, sysname, Store> 
AFTER < data_modification_statements, UPDATE > 
AS < T-SQL_statement, 
 
 
UPDATE  Sales.Store 
ModifiedDate = GETDATE() 
FROM inserted WHERE inserted.Customer ID = Sales.Store.CustomerID > 
GO

Suppression d'un déclencheur

Si vous n'avez plus besoin d'un déclencheur, vous pouvez le supprimer d'une table. La formule pour le faire est la suivante :

DROP TRIGGER TriggerName

Après l'expression DROP TRIGGER, entrez le nom du trigger.

Déclencheurs DML

 

Introduction

Microsoft SQL Server prend en charge trois types de déclencheurs : DML, DDL et logon.

Un déclencheur DML est une procédure qui agit comme la suite d'un événement de langage de manipulation de données survenant sur une table. Cela signifie que le trigger doit être créé dans la connexion à une table d'une base de données non système.

Types de Déclencheurs DML : Après Insertion

Un déclencheur insert est un déclencheur DML qui agit lorsqu'un nouvel enregistrement est ajouté à sa table de destination. La formule principale pour créer un déclencheur DML d'insertion sur une table est la suivante :

CREATE TRIGGER TriggerName 
ON TableName 
AFTER/FOR INSERT 
AS 
   TriggerCode

L'instruction démarre avec CREATE TRIGGER, suivie d'un nom. Le nom est conforme aux règles que nous avons appliquées jusqu'à présent pour les objets de base de données. Après avoir spécifié le nom du trigger, écrivez ON suivi du nom de la table sur laquelle le déclencheur sera appliqué. Bien entendu, la table doit exister dans la base de données.

Dans notre formule, nous supposons que le déclencheur s'applique lorsqu'un enregistrement a été ajouté à la table. Par conséquent, vous utilisez AFTER INSERT ou l'expression FOR INSERT.

Pour démarrer le code SQL qui constitue l'objet du déclencheur, écrivez AS et puis écrivez votre code.

Après avoir créé un déclencheur INSERT, au bon moment (lorsque déclenche son événement prévu), il sera exécuté. Lorsque cela se produit, le moteur de base de données interne crée automatiquement une table temporaire nommée inserted. Cette table contient une copie des dossiers qui ont été créés. Vous pouvez accéder à ces enregistrements si nécessaire.

Practical LearningFormation pratique : Création d'un déclencheur DML

  1. Cliquez quelque part dans la fenêtre du milieu pour lui donner le focus, puis appuyez sur Ctrl + A pour tout sélectionner.
  2. Pour créer un nouveau trigger, tapez ce qui suit :
    USE CeilInn4;
    GO
    
    --========================================================
    --Database :    CeilInn4
    --DML Trigger : RecordInsertion
    --Description : This trigger updates the DatabaseOperations
    --              by letting it know that a new record was 
    --              added to the Rooms table. The trigger 
    --              specifies the name of the employee 
    --              who performed the operation and the time 
    --              this occurred
    --======================================================== 
    CREATE TRIGGER RecordInsertion 
    ON Rooms
    AFTER INSERT 
    AS 
    BEGIN 
        INSERT INTO DatabaseOperations 
    VALUES(N'Table', N'Rooms', SUSER_SNAME(), 
           N'Created a new record', GETDATE()) 
    END 
    GO
  3. Appuyez sur F5 pour exécuter
  4. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur bases de données et cliquez sur Actualiser
  5. Développez bases de données et développez CeilInn4
  6. Sous CeilInn4, développez tables
  7. Pour effectuer la saisie de données, cliquez avec le bouton droit de la souris sur Rooms et cliquez sur Edit Top 200 Rows (cet exercice serait plus intéressant si vous pouvez tout d'abord créer des comptes de 1 à 3, déconnectez-vous, puis connectez-vous en tant que différents comptes et continuez avec l'entrée de données)
     
    RoomNumber LocationCode RoomType BedType Rate Available
    104 SLSP        
    105 SLSP   King 95.50 True
    106 SLSP   King 95.50 True
    107 SLSP       True
    108 SLSP   King 95.50  
    109 SLSP       True
    110 SLSP Conference   450.00 True
  8. Fermez la table
  9. Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris dans la table DatabaseOperations, puis cliquez sur Select Top 1000 rows pour voir ses enregistrements
  10. Fermez la table DatabaseOperations

Types de déclencheurs DML : après la mise à jour

Au lieu du temps de l'insertion de l'enregistrement, un déclencheur DML peut agir lorsqu'un enregistrement a été mis à jour sur une table. Pour prendre en charge cette opération, vous pouvez utiliser la formule suivante :

CREATE TRIGGER TriggerName 
ON TableName 
AFTER/FOR UPDATE 
AS 
    TriggerCode

Le nouveau mot-clé dans cette formule est UPDATE. Ceci indique que le déclencheur DML agira lorsque l'enregistrement a été mis à jour.Tout le reste est comme décrit pour l'opérateur INSERT. N'oubliez pas d'utiliser AFTER UPDATE ou FOR UPDATE.

Practical LearningFormation pratique : Mise à jour avec un déclencheur DML

  1. Cliquez quelque part dans la fenêtre du milieu pour lui donner le focus, puis appuyez sur Ctrl + A pour tout sélectionner.
  2. Pour créer un nouveau trigger, tapez ce qui suit :
    USE CeilInn4;
    GO
    
    --========================================================
    --Database : CeilInn4
    --DML Trigger : RecordUpdate
    --Description : This trigger adds a new record to the
    --              DatabaseOperations when an existing record
    --              of the Rooms table is updated
    .--======================================================== 
    CREATE TRIGGER RecordUpdate 
    ON Rooms 
    AFTER UPDATE 
    AS 
    BEGIN 
        INSERT INTO DatabaseOperations 
        VALUES(N'Table', N'Rooms', SUSER_SNAME(), 
               N'Changed an existing room record', GETDATE()) 
    END 
    GO
  3. Appuyez sur F5 pour exécuter
  4. Pour modifier des enregistrements, dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris sur Rooms et cliquez sur Edit Top 200 Rows
  5. Modifiez les enregistrements suivants
     
    RoomNumber LocationCode RoomType BedType Rate Available
    105 Queen 88.75 False
    107 LRL King 98.50
    110 Delete Queen) 485.50 False
  6. Fermez la table
  7. Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris dans la table DatabaseOperations, puis cliquez sur Sélectionner Top 1000 lignes pour voir ses enregistrements
  8. Fermez la table DatabaseOperations

Types de déclencheurs DML : après suppression

Lorsqu'un enregistrement a été supprimé d'une table, vous pouvez appliquer un déclencheur DML en réponse. Pour la rendre possible, vous pouvez utiliser la formule suivante :

CREATE TRIGGER TriggerName 
ON TableName 
AFTER/FOR DELETE 
AS 
 TriggerCode

Cette fois, la formule utilise l'opérateur DELETE dans AFTER DELETE ou une expression DELETE. C'est utilisé pour enregistrer la suppression. Les autres facteurs suivent la même description que nous avons vue pour l'opérateur INSERT.

Lorsqu'un déclencheur DELETE a statué sur une table, le moteur de base de données crée une table temporaire spéciale nommée deleted. Cette table contient une copie des dossiers qui ont été supprimés. Finalement, si nécessaire, vous pouvez accéder à ce tableau pour en savoir plus sur ces dossiers.

Practical LearningFormation pratique : Suppression d'un déclencheur DML

  1. Cliquez quelque part dans la fenêtre du milieu pour lui donner le focus, puis appuyez sur Ctrl + A pour tout sélectionner
  2. Pour créer un nouveau trigger, tapez ce qui suit :
    USE CeilInn4;
    GO
    
    --========================================================
    --Database : CeilInn4
    --DML Trigger : RecordDeletion
    --Description : Ths trigger adds a new record to the 
    --              DatabaseOperations when an existing record
    --              of the Rooms table has been deleted.
    --======================================================== 
    CREATE TRIGGER RecordDeletion 
    ON Rooms
    AFTER DELETE 
    AS 
    BEGIN 
        INSERT INTO 
    DatabaseOperations 
    VALUES(N'Table', N'Rooms', SUSER_SNAME(), 
           N'Deleted a room', GETDATE()) 
    END 
    GO
  3. Appuyez sur F5 pour exécuter
  4. Pour supprimer un enregistrement, dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris sur Rooms et cliquez sur Modifier les lignes Top 200
  5. Cliquez avec le bouton droit de la souris sur l'en-tête de ligne d'enregistrement 106 puis cliquez sur Supprimer
  6. Cliquez sur Oui pour confirmer que vous souhaitez supprimer,
  7. Fermez la table
  8. Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris dans la table DatabaseOperations, puis cliquez sur Sélectionner Top 1000 lignes pour voir ses enregistrements
  9. Fermez la table DatabaseOperations

Caractéristiques des déclencheurs DML

 

Introduction

Bien que jusqu'à présent, nous avons créé un seul trigger pour une table, vous pouvez aller plus loin que cela :

  • Vous pouvez créer plusieurs déclencheurs DML (à l'aide des noms différents, bien entendu), qui exécutent la même action sur une table. Cela signifie que vous pouvez créer de nombreux déclencheurs INSERT (ou plusieurs déclencheurs UPDATE ou de nombreux déclencheurs DELETE) qui agissent sur la même table et qui ciblent la même action
  • Vous pouvez créer différents déclencheurs qui agissent sur une table

Les Déclencheurs DML présentent de nombreuses autres caractéristiques.

Restrictions et les déclencheurs DML

Dans la leçon 11, nous avons vu que, pour aider un utilisateur avec l'entrée de données, vous pouvez spécifier qu'une colonne pourrait autoriser ou pas autoriser les null values. Si une colonne est marquée comme étant NOT NULL, lors de la saisie de données, si l'utilisateur ne fait pas ou s'il ne peut pas fournir une valeur pour cette colonne, l'enregistrement ne peut pas être créé. Si vous créez un déclencheur DML qui doit agir contre cette table, si la règle de nullité est enfreinte, le déclencheur ne s'exécutera pas.

Dans la leçon 11, nous avons vu que vous pouvez créer une check constraint sur une table pour vous assurer que chaque nouvel enregistrement, ou un enregistrement qui est en cours de modification, suit une certaine règle. Nous savons que si l'enregistrement ne respecte pas cette règle, l'enregistrement ne sera pas créé ou modifié. Si un déclencheur DML est censé agir sur la table, si cette règle n'est pas respectée, le trigger échoue.

Une des limites d'une contrainte check est qu'elle ne s'applique qu'à la table à laquelle elle appartient. Il est possible de créer un déclencheur DML pour effectuer une contrainte check sur plusieurs tables. Cela fournit son avantage sur la contrainte check normale.

Dans la leçon 16, nous avons étudié la referential integrity et les relations de données. Cela garantit que, lorsqu'un enregistrement est modifié dans une table parent, la modification est apportée également sur la table enfant. Cela signifie également que l'intégrité est appliquée à plusieurs tables. Lorsqu'un déclencheur DML s'exécute, si une règle référentielle est violée, le déclencheur, qui vérifie également l'intégrité référentielle, échoue.

Le déclencheur DML Instead of

 

Introduction

Examinez la table et la vue suivantes dans une base de données :

CREATE DATABASE SmallBusiness ;
GO 
 
 
USE SmallBusiness ;
GO
 
 
CREATE TABLE Customers 
(
    Customer ID int identity (1, 1) primary key not null,
    AccountNumber nchar(10), 
    FullName nvarchar (50)
); 
GO 
 
 
CREATE TABLE DatabaseOperations (
    EmployeeName nvarchar(50),
    ActionPerformed nvarchar (50), 
    TimePerformed datetime2
); 
GO

De ce que nous avons vu jusqu'à présent, lorsqu'un utilisateur ouvre une table ou une vue pour effectuer la saisie de données, lorsqu'un nouvel enregistrement a été créé, la table ou la vue déclenche un événement. Nous avons vu que, à l'aide d'un déclencheur DML, vous pouvez faire une notification. Par exemple vous pouvez remplir un journal pour conserver une trace des modifications. Par défaut, lorsqu'un enregistrement est soumis, il est enregistré. Dans certains cas, lorsqu'un utilisateur a ouvert une table et essayé d'apporter une modification, tels que l'ajout d'un nouvel enregistrement, la modification d'un enregistrement existant ou une suppression, au lieu d'accepter la modification, vous pouvez la rejeter. Vous pouvez ensuite utiliser un déclencheur DML pour faire une remarque. C'est la base d'une autre catégorie de déclencheurs DML : un déclencheur "instead of".

Même si un déclencheur AFTER / FOR agit sur une table après que l'action ait eu lieu, vous souhaiterez peut-être faire quelque chose avant l'événement. Par exemple, vous pouvez empêcher l'utilisateur d'ajouter un nouvel enregistrement sur un conte, ou de modifier un existant ou de le supprimer d'un enregistrement. Bien entendu, il est préférable de s'occuper de cela avant que l'action soit exécutée. Une façon dont vous pouvez effectuer cette opération c'est en créant un déclencheur "instead of".

Création d'un trigger INSTEAD OF

Même si un déclencheur AFTER peut être appliqué à une table uniquement, un déclencheur "instead of" peut être associé à une table ou une vue. Par conséquent, pour créer un déclencheur "instead of", vous utilisez la formule suivante :

CREATE TRIGGER TriggerName 
ON TableOrViewName 
INSTEAD OF INSERT/UPDATE/DELETE 
AS 
    TriggerCode

Vous commencez avec l'expression CREATE TRIGGER suivie d'un nom pour le déclencheur. Après le nom du trigger, saisissez ON, suivi du nom d'une table ou une vue sur laquelle le déclencheur va agir.

Notre examen du déclencheur AFTER, la nouvelle expression ici est INSTEAD OF. Cette expression est suivie par le type d'opération à effectuer. Si vous voulez :

  • Pour intercepter la création d'un nouvel enregistrement, utilisez l'opérateur INSERT
  • Pour intercepter l'opération de modification d'un enregistrement existant, utilisez l'opérateur UPDATE
  • Pour intercepter la suppression d'un enregistrement, utilisez l'opérateur DELETE

Pour démarrer le code déclenchement, tapez AS et écrivez le code de votre choix.

Si vous utilisez l'expression INSTEAD OF, le déclencheur démarre lorsque la table ou la vue est ouverte mais avant qu'un changement ait eu lieu. La différence avec le déclencheur AFTER est que, cette fois, vous pouvez effectuer certaines actions avant que la modification soit effectuée sur la table ou la vue. Cela implique aussi que, si le code du trigger est de créer un nouvel enregistrement, en ce moment, l'enregistrement n'existe pas encore, ce qui signifie que vous ne pouvez pas intercepter cet enregistrement. En ce moment même, vous pouvez empêcher l'enregistrement en cours de création (puisqu'il n'a pas encore été créé quand même). Par exemple, le code suivant n'acceptera pas qu'un nouvel enregistrement soit ajouté à la table :

USE SmallBusiness ; 
GO
 
 
CREATE TRIGGER CreateCustomer 
ON Customers 
INSTEAD OF INSERT 
AS 
    BEGIN 
        INSERT INTO DatabaseOperations 
GO, 
VALUES (SUSER_SNAME(),
        N'Attempt to create new record», GETDATE()) 
END 
GO

Si vous souhaitez obtenir une copie de l'enregistrement qui a été affecté par l'événement, vous pouvez y accéder depuis inserted (pour un déclencheur INSERT ou UPDATE) ou depuis le déclencheur deleted (pour DELETE). Voici un exemple :

USE SmallBusiness ; 
GO 
 
 
DROP TRIGGER CreateCustomer ; 
GO 
 
 
CREATE TRIGGER CreateCustomer 
ON Customers 
INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO Customers 
    SELECT AccountNumber, FullName FROM insered 
END 
GO

Practical LearningFormation pratique : Création de déclencheurs INSTEAD OF

  1. Cliquez quelque part dans la fenêtre du milieu pour lui donner le focus, puis appuyez sur Ctrl + A pour tout sélectionner
  2. Pour créer un nouveau trigger, tapez ce qui suit :
    USE CeilInn4;
    GO
     
    -- ===================================================  
    -- Database:	CeilInn4
    -- View:	Logistics
    -- Description:	This view retrieves the list of rooms  -
    --               of this hotel  
    -- ===================================================  
    CREATE VIEW Logistics  
    AS      
        SELECT RoomNumber, LocationCode, RoomType,             
        BedType, Rate, Available      
    FROM Rooms;  
    GO    
    -- ========================================================  
    -- Database:	CeilInn4
    -- DML Trigger:	AttemptedRecordInsertion  
    -- Description:	This trigger acts on a table to update the  
    --	            DatabaseOperations to let it know that an  
    --	        	attempt was made to create a new room  
    -- ========================================================  
    CREATE TRIGGER AttemptedRecordInsertion  
    ON Rooms  
    INSTEAD OF INSERT  
    AS  
    BEGIN      
        INSERT INTO DatabaseOperations      
    VALUES(N'Table', N'Rooms', SUSER_SNAME(),   	
           N'Attempted to create a new record', GETDATE())  
    END  
    GO    
    -- ========================================================  
    -- Database:	CeilIn4
    -- DML Trigger:	AttemptedRecordUpdate  
    -- Description:	This trigger acts on a view to update the  
    --	            DatabaseOperations to let it know that an  
    --	            attempt was made to edit a record of  
    --		        the Rooms table  
    -- ========================================================  
    CREATE TRIGGER AttemptedRecordUpdate  
    ON Logistics  
    INSTEAD OF UPDATE  
    AS  
    BEGIN      
        INSERT INTO DatabaseOperations      
        VALUES(N'View', N'Logistics', SUSER_SNAME(),   	  
               N'Attempted to change a rooom''s information', 
     	   GETDATE()) 
    END 
    GO
  3. Appuyez sur F5 pour exécuter
  4. Dans l'Explorateur d'objets, sous CeilInn4, cliquez avec le bouton droit de la souris sur Rooms et cliquez sur Edit Top 200 Rows
  5. Ajouter les nouveaux enregistrements suivants :
     
    RoomNumber LocationCode RoomType BedType Rate Available
    104 LRL   King 95.50  
    112 SLSP   King 95.50 True
  6. Vous remarquerez un avertissement sur les en-têtes de ligne des enregistrements qui ont été modifiées sur la table.
    Fermez la table
  7. Dans l'Explorateur d'Objets, sous Affichage, cliquez avec le bouton droit de la souris sur Logistics cliquez sur Edit Top 200 Rows
  8. Modifiez l'enregistrement suivant
     
    RoomNumber LocationCode RoomType BedType Rate Available
    108 LRL Conference Delete 425.75  
  9. Vous remarquerez un avertissement sur l'en-tête de ligne de la vue.
    Appuyez sur Echap
  10. Fermez la table
  11. Dans l'Explorateur d'objets, cliquez avec le bouton droit de la souris dans la table DatabaseOperations, puis cliquez sur Select Top 1000 Rows pour voir ses enregistrements
  12. Fermez la table

Caractéristiques des déclencheurs INSTEAD OF

AFTER / FOR et un déclencheur INSTEAD OF ont beaucoup de différences. Par exemple :

  • Un INSTEAD OF UPDATE ou un trigger INSTEAD OF DELETE ne peut agir sur une table qui a une colonne marquée avec les opérateurs DELETE ou UNIQUE
  • Vous ne pouvez créer qu'un seul type de déclencheur INSTEAD OF pour chaque table. Par exemple, une table ne peut pas avoir plusieurs trigger INSTEAD OF INSERT

Déclencheurs DDL

 

Introduction

Dans la leçon 3, nous avons vu que la création d'une base de données utilise une commande DDL (Data Definition Language). Dans la leçon 9, nous avons vu un autre exemple d'une commande DDL qui implique la création d'une table. Chacune de ces opérations de création déclenche un événement.

Un déclencheur DDL est un déclencheur qui agit lorsqu'un certain type d'événement DDL se déclenche. Celles-ci incluent la création, la modification ou la suppression d'un objet, pas ses enregistrements. Il s'agit de la principale différence avec un déclencheur DML déclenchant lorsqu'un enregistrement est ajouté ou imposé.

Un déclencheur DDL vous donne la possibilité de faire certains travaux administratifs en réponse à l'événement. Par exemple, vous pouvez recevoir une notification ou informer quelqu'un d'autre à l'aide d'un courrier électronique généré automatiquement, ou avertir qu'un (et quel) objet a été créé. Ou vous pouvez utiliser un déclencheur DDL pour annuler l'opération.

Création d'un déclencheur DDL

Vous créez un déclencheur DDL à l'aide d'un code. La formule de base est la suivante :

CREATE TRIGGER TriggerName 
ON DATABASE/ALL SERVER 
FOR/AFTER WhatEvent 
AS 
  TriggerCode

Vous commencez un déclencheur DDL avec l'expression CREATE TRIGGER suivie d'un nom pour le nouveau déclencheur. Le nom suit les mêmes règles que nous avons appliquées jusqu'aux objets. Après le nom du trigger, tapez le mot-clé ON :

  • Si vous souhaitez que le déclencheur agisse sur la base de données courante, tapez DATABASE. Lorsque l'événement prévu se produit sur la base de données courante, le déclencheur exécutera.
  • Si vous souhaitez que le déclencheur agisse sur le serveur, suivez l'opérateur ON ALL SERVER. Dans ce cas, lorsque l'événement prévu se produit sur n'importe quelle partie du serveur, le trigger s'exécute

Après avoir spécifié l'objet (le serveur entier ou seulement la base de données courante) sur lequel le déclencheur agira, tapez FOR ou AFTER. Ceci est suivi de l'événement contre lequel agira le déclencheur. Comme nous l'avons déjà mentionné, les événements sont des commandes DLL. Pour spécifier l'événement, utilisez la formule de la commande avec les mots séparés par un trait de soulignement. Par exemple, si vous souhaitez que le déclencheur agisse lorsqu'une commande CREATE TABLE est exécutée, spécifiez l'événement comme CREATE_TABLE.

Après avoir spécifié l'événement qui se déclenche, tapez AS suivi du code normal du déclencheur.

Voici un exemple qui rend une note et l'ajoute à une table lorsqu'une nouvelle table a été créée :

USE SmallBusiness ; 
GO 
 
 
CREATE TRIGGER LogNewTableCreation 
ON DATABASE 
FOR CREATE_TABLE 
AS 
BEGIN 
    INSERT INTO DatabaseOperations 
    VALUES(SUSER_SNAME(), 
           N'A new table was created', 
GETDATE()) 
END 
GO

Chaque fois qu'une nouvelle table est créée dans la base de données courante, les longueurs de déclencheur obtiennent le nom de l'utilisateur qui a créé la table, la date et l'heure de la table ont été créées et un message de petite taille. Ces éléments d'information sont ensuite stockés dans une table de journal.

Comme mentionné pour les déclencheurs DML, vous gérez les déclencheurs DDL en modifiant ou en les supprimant. Ceux-ci sont effectués en utilisant la même description que nous avons vue pour les déclencheurs DML.

       

Précédent Copyright © 2010 Yevol.com Suivant