2016-07-15 50 views
0

我是根據以下模式如何在另一個表

想更新基於值表我怎能根據orderDetail表產品數量值更新庫存超出股票價值。

例如我有下面的樣本數據

的OrderDetail

Order-id Product-id Qty 
1   1   5 

庫存

Inventory-id Date  Product-id In-stock Out-stock stock-left 
1    1/1/2016 1   10  5   5 

允許在數量的訂單細節表值說變爲1我如何在庫存表中將其更改爲1。

模式 enter image description here

+0

可能是一個數據庫觸發器可以幫助做到這仍然解決此問題。你有沒有考慮過這個選項? –

+0

不是有沒有類似於我的情況的任何示例謝謝 – Ayman

+3

我認爲問題在於您的設計存在缺陷。沒有理由在庫存表中存儲已售出的庫存量。該值可以並且應該在需要時使用訂單信息實時計算。考慮當事情返回等時,這會變得多麼複雜......您需要在此處修復關係模型。 –

回答

0

可以使用觸發器來傳播價值觀

CREATE TRIGGER [dbo].[inventory_update] ON [dbo].[OrderDetail] 
    FOR UPDATE 
    AS 
    BEGIN 

     UPDATE Inventory 
     SET OutStock = inserted.Qty 
     FROM inserted 
     WHERE Inventory.inventory-id = inserted.inventory-id 

    END 
+0

正如你可能猜測錯誤是'Inventory.inventory-id'沒有定義。 –

0

使用這裏的的Upsert沃爾德幫助

MERGE INTO tablename USING table_reference ON (condition) 
WHEN MATCHED THEN 
UPDATE SET column1 = value1 [, column2 = value2 ...] 
WHEN NOT MATCHED THEN 
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...]); 
0

第一件事,我會說,計算成員不應該用作表格中的屬性。例如=>庫存=(總量) - (已售數量)。這應該是一個計算所得成員,只是一個表達式SQL

順便說一句,你可以使用UPDATE觸發器