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
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
BESOIN D'UN BIBESOIN D'UN BI par michimichid
Cliquez pour lire la suite par michimichid
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|