创建触发器以更新 SQL Server 中的另一个表

Jes*_*ess 1 sql t-sql database sql-server

我正在尝试在 SQL Server 中创建触发器。我通过我在 Access 中制作的表单将数据插入到数据库中。当我创建一个插入到我的SALESDETAILS表中的新记录时,我希望它从我的表中的quantity(列)中减去刚刚输入的In Stock(列)PRODUCTSALESDETAILS包含来自PRODUCT表 ( Product_ID)的 FK 。

这就是我想出的,SQL Server 创建了触发器,但它现在不允许任何插入。在我尝试插入一些东西后,它说PRODUCT.[In Stock]不允许 NULLS。[In Stock]确实有一个不允许 NULLS 的约束。

CREATE TRIGGER [Update_Stock] 
ON SALESDETAILS
FOR INSERT
AS 
BEGIN

    UPDATE PRODUCT
    SET PRODUCT.[In Stock] = (SELECT SALESDETAILS.Quantity - PRODUCT.[In Stock] 
                              FROM SALESDETAILS
                              WHERE SALESDETAILS.Product_ID = PRODUCT.Product_ID)
END
Run Code Online (Sandbox Code Playgroud)

我认为我没有正确考虑这一点,但我似乎无法弄清楚如何让它减去刚刚从表中的[In Stock]列中插入的数量PRODUCT

san*_*mis 5

试试这个触发器:

CREATE TRIGGER [Update_Stock] ON SALESDETAILS FOR INSERT
AS BEGIN
Update p 
set p.stock = p.[stock] - i.quantity
FROM product AS p
INNER JOIN inserted AS i
ON p.id = i.[product_id]
WHERE p.id = i.product_id
END
Run Code Online (Sandbox Code Playgroud)

Inserted 是允许您在 SALESDETAILS 表中获取当前插入值的表。