TRIGGER AFTER / BEFORE

Résolu
Signaler
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009
-
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
-
hello, j'ai un trigger :
CREATE

TRIGGER dbo
.IsAuthDeleted

ON dbo
.amp_users_roles after

delete
AS

BEGIN
END

mais je voudrais que ce trigger s'exécute AVANT un delete.
Je voulais mettre :
CREATE
TRIGGER dbo
.IsAuthDeleted

ON dbo
.amp_users_roles

before delete

AS

BEGIN
END

mais SQLServer ne veut pas du before dans ce cas.

Quel solution ??

vladam
(pour vous servir :) )

4 réponses

Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
Je suis partiellement d'accord avec christian le rollback est bien mais il oblige a tenir compte du contexte (la transaction étant entièrement annuler, ce n'est pas forecement l'effet souhaiter) pour ma part voilà ce que je ferais:

CREATE TRIGGER.IsAuthDeleted

   ON dbo
.amp_users_roles 

   INSTEAD OF DELETE 
AS
BEGIN
   DELETE FROM dbo.
amp_users_roles
 WHERE ID IN (SELECT ID FROM deleted WHERE AuthFlag=0);
END

Le trigger sera lancer directement à la place du traitement normal , mais il ne sera pas relancer une seconde fois (Pas de récursivité) lors du l'appel DELETE ...

Pour quelques infos sur les triggers SQLServeur va voir la tutos :
http://www.sqlfr.com/tutoriaux/MS-SQL-SERVER-DEBUTER-AVEC-TRIGGERS_449.aspx
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Bonjour,

Pourquoi vouloir l'executer avant ?

Il n'y a pas de trigger BEFORE sur SQL Server, seul les validations de contraintes se font "avant" l'opération.

Il existe cependant un Trigger INSTEAD OF dans lequel on ecrit le code qui doit effectuer l'action.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Messages postés
216
Date d'inscription
dimanche 13 janvier 2002
Statut
Modérateur
Dernière intervention
7 novembre 2009

et bien , disons que dans une table, un des champs "bit" autorise ou non l'effacement du record.
Ce que je veux, c'est un trigger sur ma table, qui controle que le record devant être deleté a bien le champ à True, et sinon, annule le delete.
cela me permettra d'assurer l'intégrité de la base de données, même si le développeur oubli de faire la vérification.

Une solution ?

vladam
(pour vous servir :) )
Messages postés
259
Date d'inscription
mercredi 3 mai 2006
Statut
Modérateur
Dernière intervention
11 janvier 2010
7
Pour annuler le DELETE tu peux executer ROLLBACK dans un TRIGGER AFTER, celà aura pour effet d'annuler le DELETE qui a déclenché le TRIGGER.

Autre question, est ce que tu auras plusieurs enregistrements supprimés ou 1 seul à la fois dans chaque DELETE ?

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration