Programmation » Trigger sur une DB MS SQL
Catégorie:  
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 10:09:10,
Par Jean-Christophe
Bonjour les gens,

Voilà, je ne connais rien en SQL, mais je me soigne.
Pour le moment, je me casse la tête sur un trigger.

Avec mes mots à moi :

Sur la table VENTES
Après un INSERT
Si ventes.prix > 100 alors
vendeur.ventes++ WHERE vendeurs.ID = ventes.vendeur
fin


Si vous avez des exemples que je puisse consulter, ce serait top :smile:

Merci

PS : MS SQL 2005
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 10:37:43,
Par kortenberg
Un petit exemple où tu devrais trouver de quoi faire.
Je ne suis pas un pro SQL[1] mais il marche.
  1. CREATE TRIGGER [message].[Message_TreatmentRootIDDefault] 
  2.    ON  [message].[Message] 
  3.    AFTER INSERTUPDATE 
  4. AS  
  5. BEGIN 
  6. SET NOCOUNT ON; 
  7. UPDATE [message].[Message] 
  8.    SET [TreatmentRootID] = [ID] 
  9.  WHERE [TreatmentRootID] IS NULL  
  10.  AND [ID] IN (SELECT ID FROM inserted) 
  11. END

Il tourne en sur MSSQL2008 mais ça ne fait pas vraiment de différence

[1] donc si un superpro voie un truc non optimal ou un problème dans ma manière de faire, qu'il n'hésite pas à le dire

Dernière édition: 03/02/2011 @ 10:43:54
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 10:44:58,
Par Jean-Christophe
Voilà, j'ai trouvé :smile:

CREATE TRIGGER MonTrigger
ON Ventes
FOR INSERT
AS
BEGIN
IF (SELECT prix FROM inserted) > 100
UPDATE Vendeurs SET ventes = (SELECT ventes FROM Vendeur WHERE id =(SELECT Vendeur from inserted) + 1) WHERE id = (SELECT Vendeur from inserted)
END


\o/


edit : Merci Kort :wink:

Dernière édition: 03/02/2011 @ 10:46:39
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 10:57:02,
Par kortenberg
Attention! Plusieurs insert peuvent arriver en même temps. (p.ex. en cas de INSERT INTO blabla SELECT blablabla)
Dans ce cas, inserted contient plusieurs rows.
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 11:29:45,
Par Jean-Christophe
il ne lance pas le trigger pour chaque ligne? C'est malin ça...
Ceci dit, ici, je maîtrise le process qui fait la mise à jour. Et moi, je n'écris qu'une ligne à la fois.
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 11:34:43,
Par philfr
Moi je dis que mettre du code dans une db c'est le mal :oh:
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 11:40:00,
Par Jean-Christophe
oui, mais là, j'ai pas trop le choix.
Je connais le programme qui ajoute les lignes et je sais qu'il n'en ajoute qu'une à la fois.
Mais je ne sais pas le modifier. :spamafote:

Mon histoire de vente et de vendeur est un prétexte pour l'exemple. Ici, ce n'est pas du tout le cas :wink:
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 11:48:20,
Par gizmo
Moi je dis que mettre du code dans une db c'est le mal :oh:

Pas d'accord.
Il faut trouver un juste milieu, mais sinon, on se retrouve sans FK, ne check sur les valeurs, "parce que ca devrait etre valide cote client". Et ca devient un beau bordel ingerable, comme celui dans lequel je patauge en ce moment...

Les triggers les procedures sont tres importants, c'est juste a ne pas donner entre toutes les mains.
Concept vivant.
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 12:01:31,
Par dede

Pas d'accord.
Il faut trouver un juste milieu, mais sinon, on se retrouve sans FK, ne check sur les valeurs, "parce que ca devrait etre valide cote client". Et ca devient un beau bordel ingerable, comme celui dans lequel je patauge en ce moment...

Les triggers les procedures sont tres importants, c'est juste a ne pas donner entre toutes les mains.


Je plussoye.
   
Trigger sur une DB MS SQL
Publié le 03/02/2011 @ 23:38:42,
Par philfr
Mettre des contraintes d'intégrité oui, modifier des données on the fly non.
Répondre - Catégorie:  
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?