none
Problème de trigger sql server 2005 RRS feed

  • Question

  • Bonjor, voilà je débute avec Sql server 2005,  j'ai un problème avec un  trigger.

    Voilà un code exemple qui reflète mon problème :

     

    /* création de ma table*/
    CREATE TABLE Test (
     c1 NUMERIC(5,0) PRIMARY KEY,
     c2 NUMERIC(5,0) )
    
    /* création du trigger: il attribue la valeur 5 au champ 'c2' 
    à l'insertion d'un enregistrement dans la table 'Test' */
    CREATE trigger trigger_test on test after insert as begin declare @c1 numeric(5,0) select @c1=c1 from inserted update test set c2=5 where c1=@c1 end /*Première méthode d'insertion */ INSERT INTO Test Values (1,2) INSERT INTO Test Values (2,9) INSERT INTO Test Values (3,4) INSERT INTO Test Values (4,7) /*On affiche le résultat */ SELECT * FROM test /*Aucun problème signalé pour cette méthode d'insertion*/ /*Deuxième méthode d'insertion que je DOIT utiliser et qui pose problème*/ INSERT Test SELECT c1+10,1 FROM Test WHERE c1<=4 /*On affiche le résultat */ SELECT * FROM test /*On remarque que seul le premier enregistrement, qui a été inséré
    avec cette deuxième méthode, a été modifié par le trigger */
    Merci de votre aide et de votre indulgence envers un débutant :p

     


    mercredi 11 mai 2011 15:32

Réponses

  • Bonjour,

    Select @c1=c1 from inserted va mettre dans la variable une seule valeur (pb celle de la denière ligne) donc le update qui suit ne portera effectivement que sur une seule ligne.

    Donc si dans le trigger on se passe de passer par cette variable intermédiaire on ne devrait plus avoir de souci. Par exemple :

    update test set c2=5 where c1 in (select c1 from inserted)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse HaDi_B mercredi 11 mai 2011 17:27
    mercredi 11 mai 2011 16:10

Toutes les réponses

  • Bonjour,

    Select @c1=c1 from inserted va mettre dans la variable une seule valeur (pb celle de la denière ligne) donc le update qui suit ne portera effectivement que sur une seule ligne.

    Donc si dans le trigger on se passe de passer par cette variable intermédiaire on ne devrait plus avoir de souci. Par exemple :

    update test set c2=5 where c1 in (select c1 from inserted)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse HaDi_B mercredi 11 mai 2011 17:27
    mercredi 11 mai 2011 16:10
  • Merci beaucoup Patrice Scribe pour avoir été aussi rapide :)
    mercredi 11 mai 2011 17:31