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 :

Comment faire un trigger after update multiple


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut Comment faire un trigger after update multiple
    Salut a tous j'essaie de faire un trigger qui va géré des update multiple mais ca fonctionne pas voici mon code
    Mais ca fonctionne si je fais seulement un update a la fois

    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 trgAfterUpdateProduitPrixMultiligne
    on Produits
    after update
    as
    declare @prix decimal(10,2)
    declare @newPrix decimal(10,2)
    declare @diff decimal(10,2)
    declare @descProduit varchar(50)
    set @descProduit=(select DescProduit from inserted)
    set @newPrix=(select PrixVente from inserted)
    set @prix=(select PrixVente from deleted)
    set @diff = (@newPrix-@prix)/@prix *100
     
    if @diff >10
    begin
    	rollback
    	raiserror('L''augmentation est plus que 10 pourcent donc le prix a ete augmenter seulement de 10 pourcent ',16,1)
    	set @newPrix = (@prix * 0.1) + @prix
    	update Produits set PrixVente=@newPrix where DescProduit=@descProduit
     
    end
     
    if @diff < -10
    begin
    	rollback
    	raiserror('La diminution est plus que 10 pourcent donc le prix a ete diminué seulement de 10 pourcent ',16,1)
    	set @newPrix = @prix-(@prix * 0.1) 
    	update Produits set PrixVente=@newPrix where DescProduit=@descProduit
    end
    go
    --test
    Update Produits set PrixVente = 7.00 where PrixVente > 5.00

  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
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Un trigger est par nature ensembliste. Il ne se déclenche qu'une seule fois, même si 265454564 lignes ont été mises à jour !

    Il faut donc faire une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IF EXISTS(SELECT *
                FROM deleted AS D
                        INNER JOIN inserted AS I
                                ON D.LaClef = I.LaClef
                WHERE I.prix - D.prix > D.prix * 0.1)
       ROLLBACK
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    merci

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

Discussions similaires

  1. Comment faire un trigger
    Par momoh dans le forum Signal
    Réponses: 1
    Dernier message: 04/12/2007, 22h28
  2. Réponses: 5
    Dernier message: 15/06/2007, 16h05
  3. Trigger After Update
    Par hair_peace dans le forum Oracle
    Réponses: 8
    Dernier message: 23/08/2006, 21h10
  4. comment faire un insert, + select + update dans la meme requete
    Par jam92400 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/06/2006, 18h33
  5. TRIGGER After Update
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 20/07/2005, 13h33

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