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 :

simple requete mais pourtant


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut simple requete mais pourtant
    Bonjour,
    Voila j'ai 2 tables Intervenant et intervenant_societe.
    Lorsque je supprime une societe, je veut supprmer tous les interevants qui ne sont liés qu'à cette société. Plutôt simple à comprendre.

    Pour cela j'utilise un trigger

    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
    33
    34
    35
    36
    CREATE TRIGGER  maj_inactif  ON [dbo].[SOCIETE] 
    FOR UPDATE
    AS
     
    DECLARE @inactif as bit, @old_inactif as bit, @code_societe as int
     
    SELECT @inactif = inactif, @code_societe = code_societe FROM inserted
     
    SELECT @old_inactif = inactif FROM deleted
     
    if (@inactif <> @old_inactif)
    begin
     
    	UPDATE INTERVENANT_SOCIETE SET inactif = 1
    	WHERE  code_societe = @code_societe
     
    	UPDATE INTERVENANT 
    	SET inactif = 1
    	FROM INTERVENANT
    		INNER JOIN INTERVENANT_SOCIETE 
    		ON (INTERVENANT_SOCIETE.reference_Adresses  = INTERVENANT.Reference_Adresses)
    		WHERE INTERVENANT_SOCIETE.code_societe = @code_societe
    		AND count(*) =1
    		/*AND count(SELECT INTERVENANT_SOCIETE.reference_adresses FROM IS WHERE ref = @var*/
    	/*WHERE reference_Adresses IN (SELECT INTERVENANT.reference_Adresses FROM INTERVENANT
    					INNER JOIN INTERVENANT_SOCIETE 
    					ON (INTERVENANT_SOCIETE.reference_Adresses = INTERVENANT.Reference_Adresses)
    					AND count(INTERVENANT_SOCIETE.reference_Adresses) = 1
    					)*/
     
    		if @@error!=0
    			begin
    				rollback 
    				return
    			end
    end
    Mais j'ai l'erreur suivante peut importe la solution que j'essaie d'utiliser.
    Si quelqu'un a une idée...
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tmerigon Voir le message
    Mais j'ai l'erreur suivante peut importe la solution que j'essaie d'utiliser.
    Quelle erreur ???
    Si tu utilisais FOR DELETE à la place de FOR update, si tu cherches à gérer la suppression ?
    As-tu une foreign key entre les deux tables ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Voici l'erreur "Un agrégat ne peut apparaître dans la clause WHERE que s’il est présent dans une sous-requête contenue dans une clause HAVING ou une liste de sélection, et si la colonne en cours de regroupement est une référence externe."

    Et oui, j'ai une foreign_key entre INTERVENANT et INTERVENANT_SOCIETE : Reference_Adresses.

    Je ne cherche pas à supprimer,.je me suis mal exprimé, je cherche à rendre inactif les intervenants n'étant liés qu'à la société supprimée.

    Ca doit plus clair, j'espére.

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Citation Envoyé par tmerigon Voir le message

    Je ne cherche pas à supprimer,.je me suis mal exprimé, je cherche à rendre inactif les intervenants n'étant liés qu'à la société supprimée.
    Je me suis encore mal exprimé, c'est lorsque je déclare une société inactive que je réalise ce traitement.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ça y est, j'ai ouvert les yeux :
    au milieu d'une requête, ça n'a pas de sens !
    Fais un test d'existence avec EXISTS plutôt

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    En commentant
    Je n'ai effectivement plus l'erreur.
    Seulement je ne sais pas comment restreindre la modification aux intervenants n'étant liés qu'à la société modifiée...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Fais un tour là dessus : http://msdn.microsoft.com/en-us/library/ms191300.aspx
    Fais une jointure avec DELETED

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

Discussions similaires

  1. Requete simple mais pourtant complexe
    Par logwin dans le forum Langage SQL
    Réponses: 7
    Dernier message: 26/08/2010, 15h22
  2. Mapping tout simple mais pourtant
    Par inhib-- dans le forum Hibernate
    Réponses: 3
    Dernier message: 26/06/2008, 14h46
  3. [RegEx] Preg_replace si simple mais pourtant
    Par DeZanGe dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2008, 15h49
  4. Probleme très étrange mais pourtant si simple ! (Alias)
    Par Artanis dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2005, 19h56
  5. Simple floating mais pourtant IE bugge
    Par ArithmeticException dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/02/2005, 08h32

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