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 INSERT : nom de colonne non valide


Sujet :

Développement SQL Server

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut Trigger INSERT : nom de colonne non valide
    Je cherche à faire une insertion dans la table UTILISATEUR_GLDR si insertion dans la table PERS, rien d'impossible
    SQL Serveur s'obstine à m'envoyer cette erreur : nom de colonne non valide.
    Je ne comprend pas pourquoi, mes noms de colonnes sont strictement les mêmes, je suis bien positionné sur la bonne base dans le "studio manager".
    Un détail m'intrigue : quand j'insère uniquement sur "matric" ça fonctionne.

    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
    CREATE TRIGGER [dbo].[New_matricule]
       ON [dbo].[PERS]
       AFTER INSERT
    AS 
    BEGIN
        SET NOCOUNT ON
        IF UPDATE (matric)  --Test si la colonne matric est modifie
        BEGIN
           INSERT INTO dbo.UTILISATEUR_GLDR
           (
                MATRIC
               ,PEG
           )
            SELECT 
               i.MATRIC
              ,i.PEG
            FROM INSERTED AS i
     
        END
    END

  2. #2
    Membre éprouvé
    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
    Points : 1 216
    Points
    1 216
    Par défaut
    hello,

    est-ce que la colonne PEG existe bien dans les 2 tables ?

    n'aurais-tu un problème de sensibilité à la casse dans ta base (nom de colonne en majuscule plutôt qu'en minuscule ou vice-versa) ?

    Il faudrait poster le DDL des 2 tables (UTILISATEUR_GLDR
    et PERS) et le message d'erreur complet.

    merci
    Emmanuel T.

  3. #3
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    est-ce que la colonne PEG existe bien dans les 2 tables ?
    Non, mais je pensais que PEG devait être dans les tables suivantes :
    UTILISATEUR_GLDR
    INSERTED

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n\'aurais-tu un problème de sensibilité à la casse dans ta base (nom de colonne en majuscule plutôt qu'en minuscule ou vice-versa) ?
    Non, la casse n'est pas prise en compte.

    Il faudrait poster le DDL des 2 tables (UTILISATEUR_GLDR
    et PERS)
    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
     
    CREATE TABLE [dbo].[PERS](
        [ROWID] [int] NOT NULL,
        [MATRIC] [int] NOT NULL,
        [NOM] [varchar](30) NULL,
        [PRENOM] [varchar](30) NULL
    )
     
     
    CREATE TABLE [dbo].[UTILISATEUR_GLDR](
        [ID_UTILISATEUR_GLDR] [int] IDENTITY(1,1) NOT NULL,
        [MATRIC] [int] NULL,
        [PEG] [int] NULL,
        [ANNEE] [int] NULL
    )
    et le message d'erreur complet
    Msg*207, Niveau*16, État*1, Procédure*New_matricule, Ligne*35
    Nom de colonne non valide*: 'PEG'.

  4. #4
    Membre éprouvé
    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
    Points : 1 216
    Points
    1 216
    Par défaut
    INSERTED a la structure de PERS(puisque le trigger est sur PERS), donc pas de colonne PEG, normal.

    Est-ce que tu peux décrire précisément ce que tu veux faire ?

    merci
    Emmanuel T.

  5. #5
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Est-ce que tu peux décrire précisément ce que tu veux faire ?
    Mon besoin :

    Si un nouveau matricule est inséré dans PERS, je l'insère dans UTILISATEUR_GLDR, avec PEG = '2' et annee = '2010'.

    INSERTED a la structure de PERS(puisque le trigger est sur PERS), donc pas de colonne PEG, normal.
    Oui, je viens de comprendre mon erreur

    merci
    C'est moi qui te remercie.

  6. #6
    Membre éprouvé
    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
    Points : 1 216
    Points
    1 216
    Par défaut
    avec PEG = '2'
    est-ce une constante ?

    et annee = '2010'
    est-ce que tu as une valeur par défaut sur cette colonne ?

    Peut-être que ceci répond à ton soucis :

    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
    CREATE TRIGGER [dbo].[New_matricule]
       ON [dbo].[PERS]
       AFTER INSERT
    AS 
     
        SET NOCOUNT ON
     
           INSERT INTO dbo.UTILISATEUR_GLDR
           (
                MATRIC
               ,PEG
               ,ANNEE
           )
            SELECT 
               i.MATRIC
              ,2
              ,datepart(yyyy,getdate())
            FROM INSERTED AS i
    Emmanuel T.

  7. #7
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Merci, ça fonctionne

    est-ce une constante ?
    Oui, c'est une valeur par défaut.

    est-ce que tu as une valeur par défaut sur cette colonne ?
    Oui, c'est l'année en cours "datepart(yyyy,getdate())"

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

Discussions similaires

  1. IF EXISTS et nom de colonne non valide
    Par alex181 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 27/08/2012, 08h53
  2. Nom de colonne non valide et pourtant correct
    Par YuanYevon dans le forum Développement
    Réponses: 4
    Dernier message: 01/06/2011, 11h25
  3. Réponses: 1
    Dernier message: 21/01/2011, 15h17
  4. Réponses: 5
    Dernier message: 02/12/2010, 16h04
  5. [SSIS] [2K5] : Nom de colonne non valide
    Par Adorien dans le forum SSIS
    Réponses: 0
    Dernier message: 13/05/2008, 16h37

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