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 :

creation d'un trigger


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 53
    Points
    53
    Par défaut creation d'un trigger
    bonjour

    j'ai 2 tables client et achat
    1)client(codcl,nomcl,prncl,villecl)
    2)achat(codcl,codprod,dateachat,qtachat)==> codprod=code produit
    je veux faire une condition pour inserer dans la table achat 2 client de la ville 'paris' et les autres clients sont libre et pour ce la j'ai creé un trigger
    voila mon trigger

    create trigger ver_place on achat instead of insert
    as begin
    declare @sumparis integer
    set @sumparis=(select count(*) from inserted inner join client
    on client.codcl=inserted.codcl
    and villecl='paris')

    if(@sumparis<=2)
    begin
    insert into achat select * from inserted
    end
    else
    begin
    print('complet')
    end
    end

    mon trigger est marche tri bien mais la table achat est accepte plus 2 client de ville(paris)donc il ne verifier pas la condition sur la ville(paris)

    je vous remerci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Ton trigger vérifie que dans ton instruction d'insertion (qui peut contenir plusieurs lignes) il n'y ait pas plusieurs lignes portant sur des clients de paris.

    Il ne vérifie pas les lignes existantes de ta table achat.

    Si ce que tu souhaites est de ne pas avoir plus d'une ligne dans la table achat portant sur un client dans villecl = 'paris' alors il faut que ton trigger :
    1/ vérifie si tu tentes d'insérer une ligne dans la table achar portant sur un client de paris
    2/ si oui, vérifie s'il existe déjà un ligne dans la table achat ayant un client de paris (utilise la condition IF EXISTS).

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    bonjour

    je suis débutant en sql server et je sais pas comment utilise la fonction (if exists) pourriez vous ajouté cette condition dans mon trigger

    je vous remerci d'avance

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 75
    Points
    75
    Par défaut
    Ty trouveras une aide sur EXISTS ici


    Pour le trigger essaye qqch comme ça

    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
    IF EXISTS (select codcl from inserted inner join client on client.codcl=inserted.codcl
    	and villecl='paris')
    	BEGIN
    		--On tente d'insérer dans la table achat un client de paris
    		--On regarde s'il en existe déjà un dans la table achat
    		IF NOT EXISTS (select cl.codcl from client cl inner join achat a on cl.codcl = a.codcl and cl.villecl = 'paris')
    			BEGIN
    				--Il n'en existe pas encore
    				insert into achat select * from inserted
    			END
    		ELSE
    			BEGIN
    				--Il en existe déjà un
    				print 'complet';
    				--Attention print ne renvoie pas d'erreur à mon avis il vaut mieux un rollback transaction ou autre ...
    			END
     
    	END
    ELSE
    	BEGIN
    		--Les clients ne sont pas de paris
    		insert into achat select * from inserted
    	END

Discussions similaires

  1. creation d'un trigger
    Par tintinux dans le forum Débuter
    Réponses: 2
    Dernier message: 15/02/2011, 17h25
  2. Creation d'un trigger oracle avec un TADOQuery
    Par [DreaMs] dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/10/2009, 15h33
  3. Creation d'un trigger qui fait appel java
    Par titexe dans le forum PL/SQL
    Réponses: 2
    Dernier message: 11/04/2008, 08h33
  4. Problème de création d'un trigger
    Par DJERDJAR YACINE dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/07/2007, 13h01
  5. Creation d'un trigger selectif
    Par viagiop dans le forum Oracle
    Réponses: 4
    Dernier message: 19/06/2007, 16h13

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