Trigger qui rollback, mais pas complètement
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
Code:
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 |
la table qui sert de référence (la valeur dont j'ai besoin est dans NUM_CLEF)
Code:
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 |
Et le trigger en question
Code:
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 |
Est-ce moi qui m'y prend mal, ou est-ce que le code apres le rollback est quand même executé ?