begin process at 2012 05 27 03:46:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Procédures Stockées

 > 

Un trigger qui ne fonctionne pas à 100%


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Un trigger qui ne fonctionne pas à 100%

samedi 22 août 2009 à 10:57:45 | Un trigger qui ne fonctionne pas à 100%

Aldo38

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

declare
@ActRef varchar(10),
@ActId int,
@ActIdInter int,
@ActNature tinyint,
@ActDate datetime

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.

lundi 24 août 2009 à 11:47:32 | Re : Un trigger qui ne fonctionne pas à 100%

nivsql

Déjà si je peux me permettre, un code lisible et correctement indenté permet un debugage plus facile, la c'est tout simplement illisible et rebutoire.

Ensuite ton code me fait tout simplement bondir...

Code :
select @ActRef =TAB_ACT.ACTREF, @ActId = TAB_ACT.ACTID, @ActNature = TAB_ACT.ACTNATURE, 

@ActDate = TAB_ACT.ACTDATE FROM TAB_ACT

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 !)



Cette discussion est classée dans : table, tab, act, dict, actref


Répondre à ce message

Sujets en rapport avec ce message

requete SQL INSERT tableau 2D dans table sql [ par LaTatadu91 ] Bonjour,je debute en SQL, je precise avant tout!je programme actuellement un petit logiciel sous VC++ et j'effectue quelques requetes SQL pour attaque intégrer une sequence dans une requete [ par sana83 ] bonsoir à tous, j'ai crée une sequence [b]seq_j[/b] et une table [b]table_j [/b] [code=autre] create sequence seq_j increment by 1 start with 1 nomax requete sql [ par lamylamya12 ] Bonjour a tous, voila je suis en train de travailler sur une application que je fais pour mon stage, et je dois écrire une requête qui doit me permett sql:insertion dans 2 tables liées [ par ti7a ] Bonjour, slt tt le monde bon j'ai deux tables : la table voiture (id_voiture,id_marque ,couleur,ville.............); et la table option (id_option, probleme requete sql java [ par profiter ] bonjour, j'ai les deux tables suivantes : [code=java] public static final String table_concerne_devis__Name = "concerne_devis"; static final String[ comment modifier ou supprimer une table ou on a que les cles primaire [ par iliastafom ] Bonjour a tous! j'ai un problème je n'arrive pas à modifier une table intermédiaire( un relation tertiaire) posteservice(idpost,iddir,idser,idp,theDat Calcul de durée par différence entre 2 enregistrements [ par axvier ] Bonjour, Je "débute" sur SQL server et je me retrouver confronter à un besoin assez spécifique. Je dispose d'une table que l'on appelera "matable" c update d'une table dans une autre [ par maxtrident ] bonjour je n'arrive pas a transférer les champs de la table rc profits dans une autre table histogains...quelqu'un peut m'aider ?...je n'ai pas de mes Erreur oracle error ORA-01747: spécification utilisateur.table.colonne, table.colonne ou colonne non valide [ par midoxe ] Bonjour, C'est la première fois que je viens sur ce forum d'SQL les amis[^^happy13] je rencontre un problème bizarre que je n'ai jamais rencontré su trigger et table [ par sana83 ] bonsoir, est ce que je peux faire deux trigger update sur une table "article"? 1er: sur toute la table 2eme : sur une colonne ou 2, 3,...(exple: prix_


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,337 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales