Bonjour à tous,
Objectif : Créer un trigger qui met à 0 le champ Réserv UNIQUEMENT SUR l'enregistrement MODIFIE lorsque ce dernier est négatif.
Pourriez vous m'expliquer pourquoi ce trigger me renvoie le message ? --> Le niveau maximal d'imbrication des procedures stockées, des fonctions, des déclencheurs, ou des vues est dépassé (limite 32).
J'ai tenté de corrigé de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ALTER TRIGGER [dbo].[TransfertEgalZero] ON [dbo].[Magasin_P_Finis] AFTER UPDATE,INSERT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; UPDATE [Magasin_P_Finis] set transfert=0 where transfert < 0 END
- Est ce bon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 ALTER TRIGGER [dbo].[StockReserveEgalZero] ON [dbo].[Magasin_P_Finis] AFTER UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; declare @NAuto Integer declare @Nbr Integer select @NAuto = [Auto] from inserted select @nbr = [réserv] from inserted if @Nbr<0 begin UPDATE [Magasin_P_Finis] set [réserv]=0 where [Auto] = @NAuto end END
- Est ce de cette manière que l'on récupère la valeur des champs de la ligne modifiée ?
- Dans la ligne : select @nbr = [réserv] from inserted
J'aurai préféré utiliser 'Updated' puisque c'est un trigger after Update mais j'ai un message d'erreur en retour.
Cela semble fonctionner quand même. pourquoi ?
Par avance, merci de toutes vos réponses.
Cyrille.
Partager