Gérer toutes les lignes d'un update/insert dans un trigger
Bonjour,
J'ai pu trouver plusieurs post de ce type mais cela ne correspond pas exactement à mon soucis.
Voici, lorsqu'on effectue un update ou insert de plusieurs lignes, j'aimerais que mon trigger effectue son code sur tous les enregistrement de la table inserted et pas seulement sur la dernière ligne.
Je m'explique,
Imaginons que j'ai la table
Citation:
History
Trans_ID | Bit | Type | Zone | TKEY
1 0 P NC 57
2 0 P HD 89
3 1 H PI 12
4 0 P NC 14
J'ai l'update suivant :
Code:
1 2 3
| update History
set Bit = 1
where Type = 'P' |
Nous aurons donc 1 seul evenement update avec 3 lignes dans la table inserted.
Mon trigger lui vérifie la zone et si elle est par exemple NC il effectue un update dans une autre table.
Ce qui donne ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ALTER TRIGGER [dbo].[Trigg]
ON [dbo].[History]
AFTER INSERT,UPDATE
AS
Declare
@zone varchar(2),
@TKEY varchar(2)
BEGIN
SET NOCOUNT ON;
select @zone = i.zone, @TKEY= i.TKEY from inserted as i
If @zone = 'NC'
BEGIN
update Table2
set old = 1, old_Start = getdate()
where Table2.TKEY = @TKEY
END
END |
Le soucis est qu'il ne met à jour que la dernière ligne de ma table inserted :(
Je pensais passer par un cluster mais je sais que ce système est très lourd et utilisable en dernier recours je me tourne donc vers vous en espérant que quelqu'un aurait-il une idée ?
Merci d'avance