【发布时间】:2020-11-22 21:05:25
【问题描述】:
我有一个仓库数据库,想实现一个触发器,确保客户退回的产品数量不能超过售出的产品数量减去之前退回的产品数量。
它适用于 RETURNS 表中的一次插入,但如果我一次插入多行,则会出现错误。
我该如何解决这个问题?
谢谢!
受影响的表是
- SALES_ITEMS(产品、销售、SALES_QUANTITY)
- 退货(IDRETURN、产品、销售、退货数量)
CREATE TRIGGER tr
ON Returns
AFTER UPDATE, INSERT
AS
BEGIN
DECLARE @product INTEGER;
DECLARE @sale INTEGER;
SET @product = (SELECT PRODUCT FROM Inserted);
SET @sale = (SELECT SALE FROM Inserted);
IF (SELECT SUM(r.RETURN_QUANTITY)
FROM RETURNS r
WHERE r.PRODUCT = @product
AND r.SALE = @sale) > (SELECT s.SALES_QUANTITY
FROM SALE_ITEMS s
WHERE s.PRODUCT = @product AND s.SALE = @sale)
BEGIN
ROLLBACK TRANSACTION;
END
END
【问题讨论】:
-
什么错误???
-
您需要将您的思维转换为基于集合的思维... SQL Server 中的触发器使用您使用的 Inserted 和 Deleted 伪表,就像您在任何其他查询中使用任何其他表一样。
标签: sql sql-server triggers sql-insert