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

MS SQL Server Discussion :

[trigger] insert update et delete


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut [trigger] insert update et delete
    Bonjour,

    Je veux un trigger assez simple (mais je n'y arrive pas !).

    J'ai tout simplement deux tables qui ont des champs en communs.

    Lorsque j'insére, modifie ou supprime la table 1 je dois faire la meme chose dans la table2.

    j'ai fais ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER Planif_Trigger_Service
    ON TypesServices
    FOR INSERT, UPDATE
    AS
     
    INSERT INTO Planif_Service SELECT ID, Designation FROM inserted
    GO
    Mes questions sont les suivantes :
    Sur insert, j'insere dans l'autre base mais sur update il faut que j'update.. Puis je faire un if(insert) et if(update)

    Dois je en faire un autre en ce qui concerne le delete?


    Merci

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Tu peux faire trois triggers, ou un seul en testant les deux pseudo-tables inserted et deleted.

    Un bout de code vite écrit et non testé, peut-être à modifier, qui présuppose que la colonne ID est la clé primaire (ou alternative) de ta table :
    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
     
    UPDATE ps
    SET Designation = i.Designation 
    FROM inserted i
    JOIN Planif_Service ps ON i.ID = ps.ID
    JOIN deleted d ON i.ID = d.ID -- pas forcément indispensable
     
    INSERT INTO Planif_Service 
    SELECT i.ID, i.Designation 
    FROM inserted i
    LEFT JOIN deleted d ON i.ID = d.ID
    d.ID IS NULL
     
    DELETE FROM Planif_Service 
    FROM deleted d
    JOIN Planif_Service ps ON d.ID = ps.ID
    LEFT JOIN inserted i ON i.ID = d.ID
    WHERE i.ID IS NULL
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    ok merci.

    Mais comment savoir lorsqu'on fait "for insert, update" si c'est c'est un insert, ou un update ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    en lisant les images avant et après des pseudo tables inserted et deleted.

    Si INSERT alors deleted est vide.
    Si update alors inserted contient les nouvelles valeurs et deleted les anciennes.

    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/ * * * * *

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TRIGGER Planif_Trigger_Service
    ON TypesServices
    FOR INSERT, UPDATE, DELETE
    AS
     
    IF EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted )
    	INSERT INTO Planif_Service SELECT ID, Designation, '30/12/1899 09:00', '30/12/1899 17:00', '02:00', GETDATE() FROM inserted
    ELSE IF EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted)
    	UPDATE Planif_Service SET ID = (SELECT ID FROM inserted), nom = (SELECT Designation FROM inserted) WHERE id = (SELECT ID FROM inserted)
    ELSE IF NOT EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted)
    	DELETE FROM Planif_Service WHERE id = (SELECT ID FROM inserted)
    GO
    ca marche

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Salut,

    Pour info, le code que je t'ai posté au début fait exactement la même chose, en pur SQL, sans sous-requêtes, sans IF, sans EXISTS... Enfin, tant pis, c'est la vie !
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    désolé mais ce que je l'avais pas compris. La je pense avoir compris que tu teste avec le WHERE i.ID IS null...


    Je te remercie qd meme pour ton aide!

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

Discussions similaires

  1. Créer un trigger INSERT/UPDATE
    Par Jinkas dans le forum Développement
    Réponses: 7
    Dernier message: 18/06/2013, 11h58
  2. [2005] TRIGGER insert,update et delete
    Par lbh85 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 15/04/2013, 11h56
  3. Exception lors de insert, update et delete
    Par haykelFST dans le forum PL/SQL
    Réponses: 3
    Dernier message: 02/05/2012, 17h24
  4. Impossible de generer insert, update and delete sqldatasource
    Par samiblh dans le forum Accès aux données
    Réponses: 0
    Dernier message: 20/05/2009, 00h16
  5. TRIGGER INSERT UPDATE - Savoir si Insert ou Update
    Par mail.spam dans le forum Développement
    Réponses: 2
    Dernier message: 25/06/2008, 10h39

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