3

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

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

我可能已经用谷歌搜索了 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 种不同的方法,尝试在前面声明一个变量,但我找不到这样做的方法。

干杯。

4

1 回答 1

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

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

于 2012-12-16T16:05:40.603 回答