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 sur Delete


Sujet :

MS SQL Server

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Trigger sur Delete
    Bonjour

    J'ai créé un trigger pour logger tous les updates sur une table
    Mais le code ci-apres en raison du inner join ne traite ni les insert ni les delete, je dois adapter le code pour cela

    Ma question est la suivante :
    Afin de d'avoir la la meilleure performance,

    - Ai-je intéret a creer 3 Trigger distinct pour Insert, Update, Delete et utiliser le code ci apres uniquement pour un AFTER UPDATE
    - ou bien completer mon trigger actuel en ajoutant un AFTER Delete et ajouter aussi le code nécessaire pour traiter correctement l'Insert et le Delete

    Instinctivement cela semble un peu lourd et je pencherais pour trois trigger distinct ?

    Merci de votre aide


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TRIGGER [dbo].[ProgramModelPriceChanged]
       ON  [dbo].[ProgramModelPrice]
       AFTER  INSERT,UPDATE
    AS 
    BEGIN
    	SET NOCOUNT ON;
    	BEGIN 
    INSERT INTO [dbo].[ProgramModelPriceModification]
               ( 
           PrgCode
          ,HRK
          ,OldPrgPrice
          ,NewPrgPrice
          ,OldPrice
          ,NewPrice
          ,DateUPD
          ,who
    )
    SELECT 
     a.PrgCode,
     a.HRK,
     b.PrgPrice AS OldPrgPrice,
     a.PrgPrice AS NewPrgPrice, 
     b.NewPrice AS OldPrice,
     a.NewPrice AS NewPrice,
     getdate(),
     a.who
     from inserted a 
     INNER JOIN deleted b ON a.pkid=b.pkid
     END
     
    END

  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 : 43
    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,

    Effectivement il est plus sage de créer un déclencheur par type d’évènement, ne serait-ce que pour la simplicité de codage et donc de maintenance.

    Il est possible de ne créer qu'un seul déclencheur, mais vous devez tester l'existence de lignes dans les tables virtuelles inserted et deleted pour pouvoir décider de ce qu'il faut faire programmatiquement. C'est lourd et donc lent; or il est primordial d'avoir des transactions qui soient les plus courtes possibles

    @++

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Elsuket

    Ton avis rejoins donc mon idée

    Je vais donc creer un Trigger distinct par evenement
    C'est effectivement plus facile a coder et si ca améliore la performance il n'y a alors aucune raison de faire autrement

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

Discussions similaires

  1. créer un trigger sur delete
    Par giova_fr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/04/2010, 16h05
  2. Erreurs sur un trigger BEFORE DELETE
    Par Daikyo dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/06/2008, 02h13
  3. Trigger sur une colonne ?
    Par hpalpha dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 14h16
  4. Trigger sur select
    Par bilo2000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/02/2004, 13h39
  5. Pb Trigger sur vue
    Par cosminutza dans le forum Développement
    Réponses: 3
    Dernier message: 28/07/2003, 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