2015-03-24 113 views
1

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

这就是我想出的,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 

我不认为我能到达正确的思维,但我似乎无法弄清楚如何得到它减去刚插入关中PRODUCT表中的列[In Stock]的数量。

+0

UPDATE PRODUCT SET [IN STOCK] = [IN STOCK] - inserted.Quantity其中Product_id = inserted.product_id不确定语法,但应该像这样 – mxix 2015-03-24 23:33:04

+0

您需要**参考** Inserted伪表以某种方式触发你的触发器 - 这就是包含已插入行的“表” - 现在,每次插入单行时都更新整个表 - 不是非常高效 – 2015-03-25 06:09:40

回答

2

试试这个触发:

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 

插入的是它可以让你在SALESDETAILS表中获取当前插入值的表。

+0

这很好用!当您创建触发器时,我并不知道插入的伪表可用。谢谢! – Jess 2015-03-26 16:26:38

相关问题