Poster une réponse à un sujet: Trigger sur une DB MS SQL
Attention, ce sujet est un sujet ancien (5041 jours sans réponse)
philfr
Mettre des contraintes d'intégrité oui, modifier des données on the fly non.
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.
gizmo
Moi je dis que mettre du code dans une db c'est le mal
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.
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.
Mon histoire de vente et de vendeur est un prétexte pour l'exemple. Ici, ce n'est pas du tout le cas
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.
Mon histoire de vente et de vendeur est un prétexte pour l'exemple. Ici, ce n'est pas du tout le cas
philfr
Moi je dis que mettre du code dans une db c'est le mal
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.
Ceci dit, ici, je maîtrise le process qui fait la mise à jour. Et moi, je n'écris qu'une ligne à la fois.
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.
Dans ce cas, inserted contient plusieurs rows.
Jean-Christophe
Voilà, j'ai trouvé
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
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
kortenberg
Un petit exemple où tu devrais trouver de quoi faire.
Je ne suis pas un pro SQL[1] mais il marche.
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
Je ne suis pas un pro SQL[1] mais il marche.
- CREATE TRIGGER [message].[Message_TreatmentRootIDDefault]
- ON [message].[Message]
- AFTER INSERT, UPDATE
- AS
- BEGIN
- SET NOCOUNT ON;
- UPDATE [message].[Message]
- SET [TreatmentRootID] = [ID]
- WHERE [TreatmentRootID] IS NULL
- AND [ID] IN (SELECT ID FROM inserted)
- 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
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
Merci
PS : MS SQL 2005
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
Merci
PS : MS SQL 2005