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).

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
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
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 bon ?

- 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.