SQL:引用2个表的触发器

时间:2012-12-16 14:36:10

标签: sql sql-server database

这可能是一个愚蠢的问题,但它让我追逐我的尾巴。

订单表和产品表,如果订购数量超过库存数量,那么......

我可能用Google搜索了50个关键词,检查了3本书,找不到这样做的方法。这是我尝试做的前提,而不是我尝试过的。

CREATE TRIGGER tr_check_qty
ON order_details
FOR INSERT,UPDATE
AS
IF (SELECT quantity FROM inserted) > products.quantity_in_stock
    BEGIN
        PRINT 'Orderded quantity cannot exceed quantity in stock'
        ROLLBACK TRANSACTION
    END

我可以在哪里加入?我尝试了20种不同的方法,尝试在前面声明一个变量,我找不到办法做到这一点。

干杯。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

CREATE TRIGGER tr_check_qty ON order_details
FOR INSERT,UPDATE
AS
BEGIN
  -- rollback transaction if any product type in order exceeds stock amount
  IF EXISTS (
    SELECT 
      * 
    FROM 
      inserted
      INNER JOIN products ON inserted.product_id = products.product_id
    GROUP BY
      products.product_id
    HAVING
      SUM(inserted.quantity) > MAX(products.quantity_in_stock)
  )
  BEGIN
    PRINT 'Ordered quantity cannot exceed quantity in stock'
    ROLLBACK TRANSACTION
  END
END

适用于单行插入和多行插入。