Jes*_*ess 1 sql t-sql database sql-server
我正在尝试在 SQL Server 中创建触发器。我通过我在 Access 中制作的表单将数据插入到数据库中。当我创建一个插入到我的SALESDETAILS表中的新记录时,我希望它从我的表中的quantity(列)中减去刚刚输入的In Stock(列)PRODUCT。SALESDETAILS包含来自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。
试试这个触发器:
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 表中获取当前插入值的表。