2015-03-24 52 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

相關問題