Accueil > Forum > > > > Un trigger en SQL qui ne veut pas faire ce qu'on lui demande
Un trigger en SQL qui ne veut pas faire ce qu'on lui demande
jeudi 2 juillet 2009 à 23:13:39 |
Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

Aldo38
|
Bonjour, Débutant un peu par force dans sql (sql erveur 2005), je me suis attaqué à la génération d'un trigger qui doit réaliser la mise à jour d'une colonne si cette dernière est NULL, en recherchant sa valeur dans une autre table (avec des conditions de validité). Bien que l'excution du trigger se passe bien !!!, la colonne n'est jamais mis à jour. J'ai réalisé plusieurs variations de code, mais force est de reconnaître que je n'arrive pas au résultat escompté. Je me permets de vous envoyer le code afin que quelqu'un puisse me dire où est l'erreur (ou l'oubli). Par avance merci de votre aide. Voici le code : CREATE TRIGGER TR_TDR_TDSYN_UpdLABS_sql ON LABS FOR INSERT,UPDATE as begin declare @ActRef varchar(10), @ActId int, @ActNature tinyint, @ActDate datetime select @ActRef =Inserted.LABS.ACTREF, @ActId = Inserted.LABS.ACTID, @ActNature = Inserted.LABS.ACTNATURE, @ActDate = Inserted.LABS.ACTDATE FROM Inserted.LABS IF (@ActId is NULL) BEGIN IF (@ActNature=0) BEGIN select DICT_LABS.ACTID into Inserted.LABS.ACTID from DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND DICT_LABS.APPLICDATE IS NOT NULL AND CONVERT(datetime,DICT_LABS.APPLICDATE,103)=(select MAX(DICT_LABS.APPLICDATE) FROM DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND (DICT_LABS.EXPIRADATE IS NULL OR DICT_LABS.EXPIRADATE > CONVERT(datetime, @ActDate,103)) AND DICT_LABS.APPLICDATE < CONVERT(datetime, @ActDate,103)) end end END
|
|
vendredi 3 juillet 2009 à 00:16:06 |
Re : Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

nivsql
|
tu nous aide pas beaucoup a comprendre ton code la ... c'est assez illisible :(
|
|
vendredi 3 juillet 2009 à 00:22:24 |
Re : Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

nivsql
|
Réponse acceptée !
je le remet un peu en forme pour qu'on puisse t'aider : (et j'ai déplacer le premier begin)
CREATE TRIGGER TR_TDR_TDSYN_UpdLABS_sql ON LABS FOR INSERT,UPDATE as declare @ActRef varchar(10), @ActId int, @ActNature tinyint, @ActDate datetime begin select @ActRef =Inserted.LABS.ACTREF, @ActId = Inserted.LABS.ACTID, @ActNature = Inserted.LABS.ACTNATURE, @ActDate = Inserted.LABS.ACTDATE FROM Inserted.LABS IF (@ActId is NULL) BEGIN IF (@ActNature=0) BEGIN select DICT_LABS.ACTID into Inserted.LABS.ACTID from DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND DICT_LABS.APPLICDATE IS NOT NULL AND CONVERT(datetime,DICT_LABS.APPLICDATE,103)=( select MAX(DICT_LABS.APPLICDATE) FROM DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND (DICT_LABS.EXPIRADATE IS NULL OR DICT_LABS.EXPIRADATE > CONVERT(datetime, @ActDate,103)) AND DICT_LABS.APPLICDATE < CONVERT(datetime, @ActDate,103)) end end END
je regarderais la suite demain au bureau.
|
|
vendredi 3 juillet 2009 à 15:33:58 |
Re : Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

nivsql
|
Réponse acceptée !
Je pense avoir compris ce qui se passe.
En SQL Server tous les Trigger DML qu'ils soient déclaré en FOR ou AFTER sont des TRIGGER de type AFTER (il n'existe pas de trigger de type BEFOR comme en Oracle qui s'execute AVANT l'ordre lui meme).
Par ailleur inserted est une table, par conséquent : select DICT_LABS.ACTID into Inserted.LABS.ACTID me semble une abhération.
je modifirais la chose comme suit (je part du principe que ACTREF, ACTDATE est la clé primaire de ta table):
CREATE TRIGGER TR_TDR_TDSYN_UpdLABS_sql ON LABS FOR INSERT,UPDATE as declare @ActRef varchar(10), @ActId int, @ActNature tinyint, @ActDate datetime begin select @ActRef =Inserted.LABS.ACTREF, @ActId = Inserted.LABS.ACTID, @ActNature = Inserted.LABS.ACTNATURE, @ActDate = Inserted.LABS.ACTDATE FROM Inserted.LABS IF (@ActId is NULL) BEGIN IF (@ActNature=0) BEGIN select DICT_LABS.ACTID into @ActId from DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND DICT_LABS.APPLICDATE IS NOT NULL AND CONVERT(datetime,DICT_LABS.APPLICDATE,103)=( select MAX(DICT_LABS.APPLICDATE) FROM DICT_LABS WHERE DICT_LABS.ACTCODE = @ActRef AND (DICT_LABS.EXPIRADATE IS NULL OR DICT_LABS.EXPIRADATE > CONVERT(datetime, @ActDate,103)) AND DICT_LABS.APPLICDATE < CONVERT(datetime, @ActDate,103)) UPDATE LABS SET ACTID = @ActId where ACTREF = @ActRef and ACTDATE = @ActDate end end END
|
|
samedi 4 juillet 2009 à 09:12:32 |
Re : Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

Aldo38
|
Bonjour, Mes excuses pour le formattage de mon mail. J'espére que celui-ci ne posera pas le même problème. Merci, également pour le temps que vous avez consacré à mon problème. J'ai pris en compte vos remarques. J'ai réalisé l'exécution de ce trigger ce matin (je suis un léve tôt) et j'ai encore un petit souci. A l'exécution j'ai l'erreur suivante : "Msg 102, Level 15, State 1, Procedure TR_TDR_TDSYN_UpdLABS_sql, Line 17 Incorrect syntax near '@ActdId'.". Il s'agit de la ligne "select DICT_LABS.ACTID into @ActId from DICT_LABS ". J'ai contrôlé la syntaxe et j'avoue que je reste sec !. J'ai remplacé "@ActId" par "Inserted.LABS.ACTID", le trigger passe sans erreur, mais par contre j'ai une erreur à l'exécutiuon. Je continue à investiguer le problème, mais si vous avez une idée elle sera la bien venue. Dernière chose j'ai voulu désactiver le trigger sous sql server, mais les syntaxes que j'ai utilisés ne fonctionnent pas. Si vou pouviez m'indiquer la syntaxe à utliser se serait sympa. Je vous souhaite un bon week end PS : Si ce mail est encore mal foramatté auriez-vous une idée sur l'origine du problème?
|
|
mardi 7 juillet 2009 à 07:12:49 |
Re : Un trigger en SQL qui ne veut pas faire ce qu'on lui demande

Aldo38
|
Bonjour tous, Malheureusement malgre beacoup d'essais de syntaxe, je n'arrive pas à faire fonctionner ce trigger correctement. Je pense qu'il ne doit pas manquer grand chose, mais je reste bloqué. Alors si quelqu'un a une idée je suis preneur. Par avance merci
|
|
Cette discussion est classée dans : trigger, actid, labs, dict, inserted
Répondre à ce message
Sujets en rapport avec ce message
trigger erreur [ par sikove ]
Salut, je suis crevé, à chaque fois que j'execute ce trigger j'ai cette erreur de sql server : Serveur : Msg 107, Niveau 16, État 1, Procédure rok, L
création trigger sur mysql [ par Ninie972 ]
Bonjour, Je crée un triger sur mysql:CREATE TRIGGER modif_etat AFTER UPDATE ON VOEUX FOR EACH ROWcodev int(2);BEGINSELECT code_voeux into codev FROM v
Triggers imbriqués et table deleted [ par SharpMao ]
Bonjour à vous,J'ai un petit problèmes de trigger avec SqlServer.J'ai deux triggers imbriqués, et j'aimerais savoir s'il est possible d'accéder aux do
Correction de Trigger [ par 4rocky4 ]
Bonjour tout le monde,Je voudrai créer des triggers qui permettent de mettre à jour des tables sous Oracle.Par exemple, si on modifie la clef primaire
Need help pour créer un trigger Mysql [ par aforpien ]
bonjour à tousJe souhaiterai créer un trigger qui, lorsque j'ajoute une ligne dans une table, un champ soit mise à jour dans une autre.En fait dans la
Problème Trigger SQL [ par ninho44 ]
Bonjour,J'ai un trigger qui n'est pas très compliqué, mais j'ai quand même un problème avec.J'ai une table RESERVATION, avec trois champs ( logement,d
trigger [ par badrddin ]
bonjourje travail sur une application de gestion des congés en vb .net et sql serveret je plante sur un trucj'ai un champs soldecongé et un champs d
Un trigger qui ne fonctionne pas à 100% [ par 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
tsql trigger [ par samfp ]
[b]SAM PROGRAMMER[/b] bonjour, j'ai créer une table article dont le clé est générer automoatiquement avec un trigger au niveau de l'insertion, j'ai ut
Trigger et recupération des données [ par croftman ]
Bonjour! Voila j'ai ce trigger : [code=autre]DELIMITER | DROP TRIGGER test| CREATE TRIGGER test BEFORE DELETE ON clients FOR EACH ROW BEGIN DECL
Livres en rapport
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MYSQLSERVERMYSQLSERVER par favella
Cliquez pour lire la suite par favella
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|