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 :

Les Trigger ne fonctionne pas avec les relations [2012]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Les Trigger ne fonctionne pas avec les relations
    Bonjour,

    Je developpe une petit GPAO et j'ai 2 tables,entête de facture client (t_FactCli) et Ligne de facture client (TFactCliL) j'ai une relation entre ces 2 tables avec UPDATE et DELETE en cascade.
    voir ci après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE [NEX_DB]
    GO
     
    ALTER TABLE [dbo].[T_FactCliL]  WITH CHECK ADD  CONSTRAINT [FK_T_FactCliL_T_FactCli] FOREIGN KEY([FactCli_Num])
    REFERENCES [dbo].[T_FactCli] ([FactCli_Num])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
     
    ALTER TABLE [dbo].[T_FactCliL] CHECK CONSTRAINT [FK_T_FactCliL_T_FactCli]
    GO
    Sur la table T_factCliL, j'ai un trigger qui viens mettre à jours le reliquat de facturation dans la table des lignes d'affaire (T_AffL)
    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
     
    ALTER TRIGGER [dbo].[Tri_FactCliL_UID] ON  [dbo].[T_FactCliL]
       AFTER INSERT, UPDATE, DELETE
    AS 
    BEGIN
    	SET NOCOUNT ON;
     
        --**************************************************************************************
    	--*          Met à jours le reliquat de facturation pour les lignes d'affaires         *
    	--**************************************************************************************
    	UPDATE T_AffL 
    	SET T_AffL.AffL_QteFactRelicatUStk = T_AffL.AffL_QteFactRelicatUStk - [QteFacturee]
    	,T_AffL.AffE_Code = case T_AffL.AffL_QteFactRelicatUStk - [QteFacturee] when 0 then 5 else Case when T_Affl.AffL_QteCdeUStk=T_Affl.AffL_QteExpUStk then 4 else Case when T_Affl.AffL_QteExpUStk=0 then 2 else 3 end end end 
    	FROM T_AffL
    	RIGHT OUTER JOIN  (SELECT T_InsDel.*,T_FactCli.FactType_Code FROM (
    	SELECT isnull(deleted.FactCli_Num,inserted.FactCli_Num) as [FactCli_Num],isnull(deleted.Aff_NUM, inserted.Aff_Num) as [Aff_Num], isnull(deleted.AffL_Num, inserted.AffL_Num) as [AffL_Num], (isnull(inserted.FactCliL_QteUStk,0) - isnull(deleted.FactCliL_QteUStk,0)) as [QteFacturee]
    	FROM deleted
    	full outer JOIN inserted ON deleted.Aff_Num = inserted.Aff_Num AND deleted.AffL_Num = inserted.AffL_Num) as T_InsDel
    	LEFT OUTER JOIN T_FactCli ON T_FactCli.FactCli_Num = T_InsDel.FactCli_Num
    	WHERE FactType_Code in (2,4)
    ) as T_Temp 
    	ON T_Temp.[Aff_Num]=T_AffL.Aff_NUM AND T_Temp.[AffL_Num]=T_AffL.AffL_NUM 
    END
    Mon trigger fonctionne très bien avec des requêtes DELETE, UPDATE, INSERT sur la table T_factCliL mais ne se déclenche pas quand je fait une requête DELETE sur la table T_FACTCLI alors que ma relation efface bien les lignes correspondantes dans la table T_FactCliL .

    si quelqu'un aurais une piste je serait preneur.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Bonjour !

    Tu peux ajouter un print dans le trigger, pour voir s'il ne se déclenche vraiment pas, ou si c'est la requête à l'intérieur qui ne fait le travail qui est attendu d'elle
    Je pense qu'on est plutôt dans le 2ème cas, mais ça mérite d'être testé avant...

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    je suis du même avis, surtout si , comme je le pense, la colonne FactType_Code provient de la table T_FactCli.

    Auquel cas, la requête ne porte sur aucune ligne, car la ligne correspondante est déjà supprimée dans T_FactCli, et le filtre WHERE FactType_Code in (2,4) ne peut donc pas être vrai

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Monstros Velu Voir le message
    Bonjour !

    Tu peux ajouter un print dans le trigger, pour voir s'il ne se déclenche vraiment pas, ou si c'est la requête à l'intérieur qui ne fait le travail qui est attendu d'elle
    Je pense qu'on est plutôt dans le 2ème cas, mais ça mérite d'être testé avant...
    Merci je teste de suite

    Après test, effectivement de trigger s'exécute bien, je vais donc revoir ma requête.

    Encore merci car je cherchais partout sauf à un PB dans la requête de mon trigger comme il s'exécutait bien en effaçant la ligne de facture.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    bonjour,

    je suis du même avis, surtout si , comme je le pense, la colonne FactType_Code provient de la table T_FactCli.

    Auquel cas, la requête ne porte sur aucune ligne, car la ligne correspondante est déjà supprimée dans T_FactCli, et le filtre WHERE FactType_Code in (2,4) ne peut donc pas être vrai
    Effectivement FactType_code provient de la table T_factCli.
    je n'avais pas réagis que l'enregistrement dans l'entête était déjà effacé au moment ou le trigger était exécuté.
    Ca va compliquer mon traitement!!!!

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/11/2009, 22h31
  2. condition if qui ne fonctionne pas avec tous les elements
    Par oceane751 dans le forum Langage
    Réponses: 2
    Dernier message: 04/09/2008, 12h39
  3. Réponses: 11
    Dernier message: 05/03/2008, 15h07
  4. Réponses: 10
    Dernier message: 13/03/2007, 11h38
  5. Réponses: 5
    Dernier message: 03/10/2006, 18h25

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