cs_Aldo38
Messages postés4Date d'inscriptionmercredi 24 juin 2009StatutMembreDernière intervention22 août 2009
-
22 août 2009 à 10:57
haydii -
10 juin 2013 à 18:18
Bonjours à toutes et à tous,
Par soft je crée une facture composée d'un enregistrement principale dans une table facture,
suivi d'enregistrements dans une autre table(TAB_ACT), lié par un ID à la table facture.
J'ai écrit un trigger qui devait me permettre de mettre à jour, dans le cas d'une insertion
ou d'un update, une colonne dans la table liée TAB_ACT (il s'agit d'un ID qui fait référence à une troisième table).
Le problème auquel je suis confronté est le suivant :
Lorsque je dois mettre à jour plusieurs enregistrements de la table liée (TAB_ACT), un seul
enregistrement est mis à jour.
J'avoue avoir essayé plusieurs syntaxes, mais je suis sec. Je n'arrive pas à mettre à jour
tous les enregistrements de la table liée en insert ou en update.
Voici le trigger :
CREATE TRIGGER TR_UpdACT_sql
ON TAB_ACT FOR INSERT,UPDATE as
begin
select @ActRef =TAB_ACT.ACTREF, @ActId = TAB_ACT.ACTID, @ActNature = TAB_ACT.ACTNATURE,
@ActDate = TAB_ACT.ACTDATE FROM TAB_ACT
IF (@ActId is NULL)
BEGIN
IF (@ActNature=0)
BEGIN
-- Ici je recherche l'ID que je vais mettre dans la colonne ACTID de la tabe TAB_ACT
select @ActIdInter (select DICT_ACT.ACTID from DICT_ACT WHERE DICT_ACT.ACTCODE
@ActRef AND DICT_ACT.APPLICDATE IS NOT NULL AND CONVERT
(datetime,DICT_ACT.APPLICDATE,103)=( select MAX(DICT_ACT.APPLICDATE)
FROM DICT_ACT WHERE DICT_ACT.ACTCODE = @ActRef AND (DICT_ACT.EXPIRADATE IS NULL OR
DICT_ACT.EXPIRADATE > CONVERT(datetime, @ActDate,103))
AND DICT_ACT.APPLICDATE < CONVERT(datetime, @ActDate,103)))
-- Ici je mets à jour l'enregistrement. Quand je crée deux enregistrements il semblerait
- que seul le deuxième soit mis à jour
UPDATE TAB_ACT SET ACTID @ActIdInter where ACTREF @ActRef and ACTDATE = @ActDate
END
END
END
Je ne suis pas expert en procédure stokckée (je fais de l'auto formation), alors si quelqu'un a une idée, elle sera la bienvenue. Merci par avance.
Sans clause WHERE ? donc tu n'a aucune idée de la ligne renvoyé ... un fois de temps a autre c'est celle que tu voulais tu as de la chance, les autres fois ce sont des lignes qui ne t'interressent pas ... Magie de l'aléatoire :)
La correction ? assure toi que cette requete ne te renvois qu'une ligne et une seule ! (et tant qu'a faire, celle dont tu as besoin !)