【发布时间】:2010-12-03 23:34:09
【问题描述】:
我一直在修补这个问题一段时间,但没有什么对我有用。
问题是为 order_details 表创建一个 INSERT 和 UPDATE 触发器 (tr_check_qty),以仅允许订购库存数量大于或等于订购单位的产品。
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
为了测试这个触发器,我们应该使用这个查询:
UPDATE order_details
SET quantity = 30
WHERE order_id = '10044'
AND product_id = 7
查询选择了一个只有 28 个 quantity_in_stock 的产品,它应该触发触发器。但是我的触发器没有触发,它成功更新了表。
我怀疑触发器不喜欢局部变量,所以我尝试不使用局部变量:
(SELECT quantity FROM inserted) > (SELECT quantity_in_stock FROM products)
但这给了我一个错误。
任何帮助将不胜感激!
【问题讨论】:
-
感谢@Dog Ears 和@Martin 的帮助!你是对的,这是一项作业:p 但希望有一天我能达到一个水平,我可以为其他人的家庭作业给出自己的答案。 :D 哦,是的,我的扳机开始工作了!我在@Dog Ears 建议加入产品和插入表: DECLARE @stock int DECLARE @neworder int SELECT @stock = products.quantity_in_stock FROM products,inserted WHERE products.product_id = inserted.product_id SELECT @neworder = 插入。插入的数量 触发器起作用了!再次感谢您的两位回复! ^_^
标签: sql-server sql-server-2008 triggers