IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Trigger .. Mon amour


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut Trigger .. Mon amour
    Bonjour,

    je tente de faire un trigger qui va calculer la valeur d'une colonne d'une table :
    MonthCode --> Saisie utilisateur 200710
    MonthImport --> Trigger resultat 200711 (Annee, Mois)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE TRIGGER E_EXR_IU
    ON tblExchangeRate_EXR
    FOR INSERT, UPDATE
    AS
    BEGIN
    UPDATE tblExchangeRate_EXR
    SET EXR.EXR_MonthImport = CASE -- Changement d'annee
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) as SMALLINT) = 12
    			Then CAST(CAST(LEFT(EXR.EXR_MonthCode,4) AS SMALLINT)+1 AS CHAR(4))+ '01'
    			else 
    			CASE -- Mois longeur < 2 
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) AS SAMLLINT) < 9
    			then LEFT(EXR.EXR_MonthCode,4)+'0'+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(1)) 
    			else LEFT(EXR.EXR_MonthCode,4)+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(2)) 
    			END
    		END
    from tblExchangeRate_EXR EXR
    	INNER JOIN inserted i
    		on EXR.EXR_MonthCode = i.EXR_MonthCode;
    END;
    GO
    Lorsque je lance le trigger (intégration dans la base) j'ai le message suivant :
    Serveur : Msg 1032, Niveau 15, État 1, Procédure E_EXR_IU, Ligne 7
    Impossible d'utiliser le préfixe de colonne 'EXR'. Il doit correspondre à l'objet de la clause UPDATE 'tblExchangeRate_EXR'.

    Un grand merci pour votre aide

    Tornade

  2. #2
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Par défaut
    et ça ? (Dans l'UPDATE j'ai enlevé le nom de la table que j'ai remplacé par l'alias de la table se trouvant dans le FROM. J'ai enlevé le préfixe dans la colonne cible)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    UPDATE EXR
    SET EXR_MonthImport = CASE -- Changement d'annee
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT) = 12
    			Then CAST(CAST(LEFT(EXR.EXR_MonthCode,4) AS SMALLINT)+1 AS CHAR(4))+ '01'
    			else 
    			CASE -- Mois longeur < 2 
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) AS SAMLLINT) < 9
    			then LEFT(EXR.EXR_MonthCode,4)+'0'+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(1)) 
    			else LEFT(EXR.EXR_MonthCode,4)+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(2)) 
    			END
    		END
    FROM tblExchangeRate_EXR EXR
    	INNER JOIN inserted i
    		ON EXR.EXR_MonthCode = i.EXR_MonthCode;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Merci !!!

    Et ca marche nickel.

    MERCI

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    bonjour,

    je pense qu'il s'agit d'un d'alias mal placé (à retirer après le SET). En plus il y a une erreur de frappe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE TRIGGER E_EXR_IU
    ON tblExchangeRate_EXR
    FOR INSERT, UPDATE
    AS
    BEGIN
    UPDATE tblExchangeRate_EXR
    SET EXR_MonthImport = CASE -- Changement d'annee
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT) = 12
    			Then CAST(CAST(LEFT(EXR.EXR_MonthCode,4) AS SMALLINT)+1 AS CHAR(4))+ '01'
    			else 
    			CASE -- Mois longeur < 2 
    			When CAST(RIGHT(EXR.EXR_MonthCode,2) AS SAMLLINT (faute de frappe)) < 9
    			then LEFT(EXR.EXR_MonthCode,4)+'0'+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(1)) 
    			else LEFT(EXR.EXR_MonthCode,4)+CAST(CAST(RIGHT(EXR.EXR_MonthCode,2) AS SMALLINT)+1 AS CHAR(2)) 
    			END
    		END
    FROM tblExchangeRate_EXR EXR
    	INNER JOIN inserted i
    		ON EXR.EXR_MonthCode = i.EXR_MonthCode;
    END;
    GO
    ... mais ce n'est pas un peu étrange de faire un UPDATE dans un trigger d'une table qui réagit sur un UPDATE qui réagit sur un UPDATE qui réagit sur un UPDATE qui réagit sur un UPDATE qui réagit sur un UPDATE etc... le trigger s'appelle à l'infini ...

    Je pense qu'un trigger complique les choses dans votre cas, vous pourriez simplement convertir la date dans votre commande d'insert (avec une variable intermédiaire) ou d'update ?
    ..... mais j'ai ptét pas tout pigé après avoir vu votre réponse

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Bonjour,

    Pourquoi un update, dans update, dans update ....

    L'ajout de donnée se fait via une interface VB. D'ou mon idée d'utiliser un trigger pour que l'utilisateur n'ai rien a faire.

    Par contre la correction des alias (et de la faute de frappe) a résolu le problème. Ma question est ne vais je pas avoir des problèmes futur ???

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec mon trigger
    Par parrain27 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/05/2007, 12h10
  2. Réponses: 9
    Dernier message: 16/10/2006, 13h47
  3. Création de mon premier trigger : Argh !
    Par zevince dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/04/2006, 12h03
  4. mon trigger ne fonctionne pas !
    Par japi33 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/03/2006, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo