Bonjour,
J'ai une table (TBL_SERVICE) avec une clef PK_SERVICE auto-incrémentée. Quand je fais un insert, mon trigger vérifie la clef entrée par rapport à la référence, et si c'est bon, incrémente la valeur référence. Le problème, c'est que dans mon trigger, j'ai bien le message d'erreur (50201), l'insertion n'a effectivement pas lieu, mais il incrémente quand même la clef (alors qu'il ne devrait pas aller au delà du rollback)
la table service
la table qui sert de référence (la valeur dont j'ai besoin est dans NUM_CLEF)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Create table [TBL_SERVICE] ( [PK_SERVICE] Integer NOT NULL, UNIQUE ([PK_SERVICE]), [VCH_SERVICE] Varchar(64) NOT NULL, UNIQUE ([VCH_SERVICE]) ) go
Et le trigger en question
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Create table [TBL_CLEF] ( [PK_CLEF] Integer NOT NULL, UNIQUE ([PK_CLEF]), [VCH_CLEF] Varchar(64) NOT NULL, UNIQUE ([VCH_CLEF]), [NUM_CLEF] Integer Default 0 NOT NULL ) go
Est-ce moi qui m'y prend mal, ou est-ce que le code apres le rollback est quand même executé ?
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 create trigger TRG_SERVICE_INS on TBL_SERVICE for insert as begin /* véification de la valeur de la clef */ if( (select INSERTED.PK_SERVICE from INSERTED) <> (1 + ( select TBL_CLEF.NUM_CLEF from TBL_CLEF where TBL_CLEF.VCH_CLEF='ID_SERVICE'))) begin /* si elle est fausse, on lance l'erreur */ raiserror(50201, 16, 1) ROLLBACK TRANSACTION end /* mise à jour de la table des clefs */ UPDATE TBL_CLEF set TBL_CLEF.NUM_CLEF = TBL_CLEF.NUM_CLEF + 1 where TBL_CLEF.VCH_CLEF='ID_SERVICE' end go
Partager