TRIGGER AFTER / BEFORE

Résolu
cs_vladam Messages postés 216 Date d'inscription dimanche 13 janvier 2002 Statut Modérateur Dernière intervention 7 novembre 2009 - 21 oct. 2006 à 19:02
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 - 22 oct. 2006 à 18:41
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

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
22 oct. 2006 à 18:41
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
3
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
21 oct. 2006 à 19:32
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
0
cs_vladam Messages postés 216 Date d'inscription dimanche 13 janvier 2002 Statut Modérateur Dernière intervention 7 novembre 2009
21 oct. 2006 à 22:08
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 :) )
0
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
22 oct. 2006 à 12:26
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
0
Rejoignez-nous