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 :

T-SQL RowId et Trigger


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Points : 166
    Points
    166
    Par défaut T-SQL RowId et Trigger
    Bonjour,

    je recherche à créer un trigger qui se lors de l'insertion dans une table et qui va générer un nouveau rowguid et l'affecter dans la ligne concernée.

    Je vois pas comment faire ca, j'ai vu qu'il fallais utiliser NEWID
    Je pensais faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TRIGGER myTrigger ON table1
    FOR INSERT
    AS
    DECLARE @GUID uniqueidentifier
    BEGIN
    SET @GUID = NEWID()
    INSERT INTO table_1 VALUES (@GUID, ..., ...)
    END
    Comment récupérer les valeurs des autres colonnes ? Est ce bon de faire comme ca ou je me trompe totalement ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    Faux, car là vous ne mettez à jour qu'une seule ligne !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER myTrigger ON table1
    FOR INSERT
    AS
     
    UPDATE table1
    SET    MaColonne = NEWID()
    FROM   table1 AS T
           INNER JOIN inserted as i
                 ON T.??? = i.???
     
    GO
    En remplaçant ??? par la ou les colonnes composant la clef.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre habitué
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Points : 166
    Points
    166
    Par défaut
    Ok donc je fais un trigger sur l'insertion mais je lance une requête update.
    Par contre si je comprend inserted corresponds à la même table mais avec le nouveau champs et tu fais donc une jointure sur la clé de table1 et donc de inserted.

    Donc j'aurais pu faire mon code mais récupérer chaque valeur et faire mon insert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Nom = SELECT nom FROM inserted
    @Prenom = SELECT prenom FROM inserted

  4. #4
    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,

    Donc j'aurais pu faire mon code mais récupérer chaque valeur et faire mon insert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @Nom = SELECT nom FROM inserted
    @Prenom = SELECT prenom FROM inserted
    Effectivement, vous auriez pu en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT @Nom = nom FROM inserted
    SELECT @Prenom = prenom FROM inserted
    Sauf qu'en faisant cela, vous ne traiterez que la première ligne de l'instruction INSERT qui a déclenché le trigger ...
    Regardez les erreurs que cela engendre.

    Les tables virtuelles deleted et inserted ont strictement la même structure que la table cible, mais elle ne contiennent respectivement que les valeurs des lignes que l'on vient de supprimer ou insérer.
    Dans le cas d'une instruction UPDATE, les deux tables virtuelles sont accessibles.

    @++

  5. #5
    Membre habitué
    Homme Profil pro
    Designer API
    Inscrit en
    Octobre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Designer API

    Informations forums :
    Inscription : Octobre 2003
    Messages : 280
    Points : 166
    Points
    166
    Par défaut
    Ok merci pour vos explications. Je vais marquer le topic en résolu. Si j'ai encore un souci je reviendrai poster un message.

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

Discussions similaires

  1. [Pl/Sql] PLS-00103 triggers
    Par madimane dans le forum Oracle
    Réponses: 2
    Dernier message: 14/03/2006, 07h11
  2. Erreur ORA-21000 en PL/SQL pour un trigger
    Par keuhlu dans le forum PL/SQL
    Réponses: 3
    Dernier message: 12/03/2006, 08h47
  3. [PL/SQL] Creation de triggers dans transaction
    Par globeriding dans le forum Oracle
    Réponses: 15
    Dernier message: 07/02/2006, 11h33
  4. PL/SQL problème sur Trigger
    Par kitsune dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/12/2005, 20h35
  5. [PL/SQL] problème de trigger
    Par Chuck67 dans le forum Oracle
    Réponses: 14
    Dernier message: 09/12/2004, 23h17

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