J'ai bricolé ce problème pendant un moment, mais rien ne fonctionne pour moi.SQL Server 2008 - utilisation de variables locales pour un déclencheur INSERT et UPDATE
La question est de créer un INSERT et déclencheur mise à jour (tr_check_qty) pour la table Order_Details pour permettre que les commandes de produits qui ont une quantité en stock supérieure ou égale aux unités commandées.
CREATE TRIGGER tr_check_qty
ON order_details
FOR insert, update
AS
DECLARE @stock int
DECLARE @neworder int
SELECT @stock = quantity_in_stock FROM products
SELECT @neworder = quantity FROM inserted
IF @neworder > @stock
BEGIN
PRINT 'NO WAY JOSE'
ROLLBACK TRANSACTION
END
Pour tester ce déclencheur, nous sommes censés utiliser cette requête:
UPDATE order_details
SET quantity = 30
WHERE order_id = '10044'
AND product_id = 7
La requête sélectionne un produit qui a seulement 28 quantity_in_stock, ce qui devrait déclencher la gâchette. Mais mon déclencheur ne se déclenche pas et il met à jour la table avec succès.
Je soupçonnais que les déclencheurs n'aiment pas les variables locales, donc j'essayé de ne pas en utilisant des variables locales:
(SELECT quantity FROM inserted) > (SELECT quantity_in_stock FROM products)
Mais cela m'a donné une erreur.
Toute aide serait appréciée!
Merci pour votre aide @Dog Ears et @Martin! Vous avez raison, c'est une tâche: p mais j'espère que j'arriverai à un niveau où je pourrai donner mes propres réponses pour les devoirs des autres. : D Oh oui, j'ai la gâchette pour travailler! Je clued sur la suggestion de se joindre au produit et tables inserted de oreilles @Dog: DECLARE \t @stock int DECLARE \t @neworder \t int SELECT \t @stock = products.quantity_in_stock DE \t produits, inséré OU products.product_id = inserted.product_id SELECT \t @neworder = inséré.quantité FROM \t inserted Le trigger a fonctionné! Merci encore pour vos deux réponses!^_^ – Magi604