Bonjour à tous,
Je suis confronté à une problématique consistant à mettre en place un trigger sur une table (AFTER INSERT / AFTER UPDATE) destiné à affecter une valeur issue d'un compteur pour chacun des enregistrements . Et malheureusement, je ne peux pas utiliser AUTO_INCREMENT car je n'ai pas la possibilité de modifier la définition structurelle des colonnes de la table.
Les informations des compteurs sont stockées dans une table très simple à trois colonnes (code compteur / valeur du compteur / incrément).
Jusqu'à présent, j'avais écrit quelque chose ressemblant à cela :
Mais je viens d'apprendre que la table inserted peut comporter plusieurs enregistrements (triggers ensemblistes).
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 DECLARE @ENTRYNO integer; SELECT @ENTRYNO = E_LIBREMONTANT2 FROM inserted; IF (@ENTRYNO = 0) BEGIN IF (NOT EXISTS(SELECT 1 FROM DESEQUENCES WHERE DSQ_CODE = 'WJT~ZENTRYNO')) BEGIN INSERT INTO DESEQUENCES(DSQ_CODE, DSQ_VALEUR, DSQ_INCREMENT) VALUES('WJT~ZENTRYNO', 0, 1) END UPDATE DESEQUENCES SET DSQ_VALEUR = DSQ_VALEUR + DSQ_INCREMENT WHERE DSQ_CODE = 'WJT~ZENTRYNO' SELECT @ENTRYNO = DSQ_VALEUR FROM DESEQUENCES WHERE DSQ_CODE = 'WJT~ZENTRYNO' UPDATE ECRITURE SET E_LIBREMONTANT2 = @ENTRYNO FROM ECRITURE INNER JOIN inserted Ecr ON Ecr.E_cleunique = ECRITURE.E_cleunique END
Et là, je comprends rapidement que mon code SQL ne peut pas convenir et je ne vois pas trop comment faire...
Auriez-vous un conseil à me donner ?
Merci.
Partager