begin process at 2010 03 20 14:42:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Procédures Stockées

 > 

Un trigger en SQL qui ne veut pas faire ce qu'on lui demande


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

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 0,905 sec (3)

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