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 :

trigger en sql server


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut trigger en sql server
    bonjour
    je developpe un trigger en sql server ce trigger se declenche apres une mise a jour d'une table .ce trigger doit supprimer des lignes d une autre table
    voici le code que jai essayé

    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
    ////
    create TRIGGER TRG_delete_aff_gescom
         ON affec_previ
    after update
    AS
     
    declare @deb datetime, @fin datetime, @jour datetime, @code varchar(50), @cd float, @occ float, @nbr int, @new_occ float,
    @codecli int , @code_prj varchar(50), @type varchar (50),@day_of_week varchar (50),
    @web_delete_prj varchar (200)
     
    BEGIN 
     select @code= CODE_COLL , @deb =DEB_AFFEC , @fin= FIN_AFFEC , @occ=OCCUPATION , @codecli =code_cli , 
     @code_prj =code_projet , @type= type 
     from inserted
     
    delete from affec_pdc_jour
    where code_coll = @code
    and code_prj = @code_prj
    and code_cli = @codecli 
    end
    ///
    quand je met a jours la table affec_previ , s'il ya seulement une ligne a
    supprimé il la supprime s il ya plusiers lignes qui doivent etre supprimer
    il affiche le message d erreur suivant : "information sur la colone clé insuffisante ou incorecte ,trop de ligne sont affecté par la mise a jour "

    quelle est la solution pour pouvoir supprimer plusieurs lignes ?

    merci d avance

    vincent.sauvage

  2. #2
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut Essayez cela
    Bonjour,
    Veuillez essayer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create TRIGGER TRG_delete_aff_gescom
      ON affec_previ
      for update
    AS
    BEGIN
     
    delete affec_pdc_jour
      from affec_pdc_jour a
          inner join inserted i on ( a.code_coll = i.CODE_COLL and
                                             a.code_prj  = i.code_projet and
                                             a.code_cli  = i.code_cli )
    END

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    j ai essayé to code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    delete affec_pdc_jour 
      from affec_pdc_jour a 
          inner join inserted i on ( a.code_coll = i.CODE_COLL and 
                                             a.code_prj  = i.code_projet and 
                                             a.code_cli  = i.code_cli )

    mais toujours ca marche pas c est toujours la meme erreur

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut Quelle est la clé?
    Quelle est la clé primaire de la table affec_pdc_jour ?
    Ce problème peut persister si la table n'a pas de clé et sur deux lignes il y a les mêmes valeurs. Ne serait-ce pas ton cas ?

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    la table affec_pdc_jour a un clé primere id1 qui s incremente automatiquement par 1

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    delete affec_pdc_jour
      from affec_pdc_jour a
          inner join inserted i on a.id1 = i.id1

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    c est la table affec_prc_jour qui contient la colone id1 , mais la table affec_previ ne contient pas cette colonne

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut Essayons d'analyser autrement
    Bonjour,
    Afin de mieux comprendre ce comportement. Je te propose une chose.
    Tu as les valeurs de CODE_COLL, code_projet et code_cli. Essaye cette selection et verifie s'il n'y a pas de ligne en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from affec_pdc_jour
      where CODE_COLL = x and
                code_projet = y and
                code_cli      = z
    Tiens nous au courant.
    A+

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    j ai essayé ton code il ya des valeur en double ,mais la colone qui represente la clé contient des valeurs distincts. en plus
    j ai essayé de supprimer avec une procedure stocké est ca marche mais dans le trigger ca marche pas
    voici le code du procedure stocké

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ALTER procedure web_delete_prj
    (
    @code  varchar (50),
     @codecli varchar (50),
    @code_prj varchar (50)
    )
    as 
    delete from affec_pdc_jour 
    where
    code_coll = @code and
    code_cli = @codecli and
    code_prj = @code_prj
    j ai aussi esssayé d appeler cette procedure a partir du trigger
    avec ca : exec web_delete_prj @code ,@codecli ,@code_prj
    mais toujour ca marche pas

    merci infiniment de ton aide

Discussions similaires

  1. Trigger update sql server 2008
    Par lesapo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 07/07/2014, 10h28
  2. Trigger sous SQL-Server
    Par momedalhouma dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/02/2012, 16h46
  3. Tester la performance d'un trigger sous SQL Server 2008
    Par lerieure dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/02/2011, 18h04
  4. Réponses: 20
    Dernier message: 15/05/2009, 14h05

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