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 :

Message d'erreur trigger


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Message d'erreur trigger
    Bonjour à tous,

    Je bloque depuis plusieurs heures sur l'actualisation d'une colonne DateModif après un Update sur une table.

    J'ai une table où je liste l'ensemble des informations des agents, que je voudrais update si des informations ont changé

    Au début j'avais fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update  TableCible
    set   NumeroContrat=New.NumeroContrat
    , AnneeDeNaissance=New.AnneeDeNaissance
    , DateModif = getDate()
     
    from TableSource New
    where TableCible.IdMatricule=New.IdMatricule
    Le problème avec ce code est que je me retrouve avec toutes les lignes de la colonne DateMotif qui changent et prennent la valeur GetDate() (alors que je voudrais que seule la ligne actualisée change)

    Du coup j'ai voulu tester avec un trigger mais j'obtiens le message d'erreur suivant

    Msg*2108, Niveau*15, État*1, Procédure*TriggerUpdate, Ligne*1
    Impossible de créer déclencheur sur TableCible, car la cible ne se trouve pas dans la base de données actuelle.
    Auriez vous une piste pour m'aider à resoudre ce probleme?


    Voici mon code pour le trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TRIGGER TriggerUpdate
    	ON dbo.TableCible
    AFTER UPDATE
    AS
    BEGIN
    	UPDATE Collaborateur
    	SET DateModif = GETDATE()
    	FROM DWH_dbo.TableCible Collaborateur
    	JOIN INSERTED I
    	ON I.IdMatricule = Collaborateur.IdMatricule
    END
    Go
    En cherchant sur internet, certain me parle de "droit" pour accèder aux tables que je manipule...
    http://www.zoom.fr/phpBB2/probleme-c...urs-t2369.html


    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je ne pense pas qu'il s'agisse de permissions qu'ils vous manque, sinon le message d'erreur serait différent.
    Ici le moteur ne parvient pas à trouver la table de nom TableCible, ce qui est peut-être du au fait que le schéma qui qualifie celle-ci est incorrectement spécifié.
    En effet, on a DWH_dbo.TableCible, mais ne serait-ce pas DWH.dbo.TableCible ?

    @++

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Hello Elsuket,

    My bad, c'est moi qui à laisser trainer une erreur dans mon post en voulant changer le nom de mes tables. Ma table est bien DWH.dbo.TableCible

    Je ne sais pas si ca peut aider mais quand je mets mon pointeur de souris sur la ligne de commande de "CREATE TRIGGER", ca me met:
    Synthase invalide: Create trigger doit être la seul instruction du lot

    Et j'ai également le message suivant quand je pointe sur "on dwh.dbo.TableCible"
    L'objet n'existe pas ou n'est pas valide pour cette opération

    Merci de ton aide : )

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Je ne sais pas si mon erreur peut venir de la mais dans ma requête je n'ai ecrit qu'une partie sur la création et d'initialisation du Trigger , rien d'autre.
    Peut être faut il que j'ajoute une selection de ma table en amont ou autre chose?

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par karibuuu Voir le message
    Je ne sais pas si ca peut aider mais quand je mets mon pointeur de souris sur la ligne de commande de "CREATE TRIGGER", ca me met:
    Synthase invalide: Create trigger doit être la seul instruction du lot
    CREATE TRIGGER doit être la première instruction du lot, elle est même généralement la seule et l'unique instruction du lot !
    Si vous lancez dans le même script plusieurs lots de traitement T-SQL, veillez à les séparer par des "GO" (ou plutôt à les terminer par des "GO"). Donc, le cas échéant, rajoutez un "GO" AVANT l'instruction CREATE TRIGGER TriggerUpdate ON dbo.TableCible ....
    Exemple
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    GO
     
    CREATE TRIGGER TriggerUpdate
    ON dbo.TableCible 
    ...

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci Hamid, ca m'a enlevé mon message d'erreur sur mon trigger : )

    Il me reste deux messages d'erreuur du coup quand je pointe avec le curseur de ma souris:

    1:quand je pointe sur "on dwh.dbo.TableCible", ca m'écrit:
    L'objet n'existe pas ou n'est pas valide pour cette opération

    2: et quand je pointe sur mon IdMatricule pour l'INSERTED dans :
    JOIN INSERTED I ON I.IdMatricule = Collaborateur.IdMatricule

    =>Ca me met "Nom de colonne invalide"

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J' ai peut être une piste.
    C'est normal que mon "INSERTED" pointe dans une base "master.TableCible" où il cherche ma table TableCible qui elle est dans mon Dwh.dbo?

    J'imagine que la réponse est non (appelez moi Sherlock Homes). Suis je obligé du coup de travailler dans la base Master?

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    La table virtuelle INSERTED est le reflet au moment de l'exécution du trigger des valeurs des lignes qui viennent d’être modifiées.
    Dans le cas d'un INSERT, ce sont les lignes que l'on vient d'ajouter, et dans le cas d'un UPDATE ce sont celles que l'on vient de modifier.

    Quel est le nom de la base de données dans laquelle vous créez le trigger ?

    @++

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Avril 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    haa le Inserted sert donc à ca !! merci !
    Du coup il faut que je place la création de mon trigger juste après mon update de ma table?

    Je veux créer mon trigger dans ma table dwh.dbo.TableCible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TRIGGER TriggerUpdate
    ON dwh.dbo.TableCible
    AFTER UPDATE
    AS
    BEGIN
    UPDATE Collaborateur
    SET DateModif = GETDATE()
    FROM dwh.dbo.TableCible Collaborateur
    JOIN INSERTED I
    ON I.IdMatricule = Collaborateur.IdMatricule
    END
    Go

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    il faut que je place la création de mon trigger juste après mon update de ma table?
    Je ne suis pas sûr d'avoir bien compris; une fois que votre trigger est créé, il s'exécutera pour tout UPDATE sur la table TableCible.

    @++

Discussions similaires

  1. Message d'erreur lors de l'utilisation d'un trigger
    Par jybo71 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 24/06/2014, 09h23
  2. [SQLK][Trigger DDL]Ne pas montrer de message d'erreur
    Par elsuket dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 10/08/2007, 07h53
  3. message erreur trigger
    Par COLOMBAT dans le forum Développement
    Réponses: 3
    Dernier message: 02/06/2006, 15h03
  4. Trigger : Message d'erreur
    Par Ricardeau dans le forum InterBase
    Réponses: 9
    Dernier message: 10/03/2004, 13h10
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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