如何根据另一个表中的值更新表

时间:2016-07-15 19:09:18

标签: sql sql-server sql-server-2008

我想知道根据以下架构

如何根据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

让我们说在Order-detail表中,Qty的值变为1,我怎么能在Inventory表中将它改为1.

模式 enter image description here

3 个答案:

答案 0 :(得分:0)

使用Upsert wold帮助

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 ...]);

答案 1 :(得分: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

答案 2 :(得分:0)

首先,我想说,计算成员不应该用作表中的属性。例如=> 库存=(总量) - (已售出数量)。这应该是计算成员,只有SQL 中的表达式。

顺便说一句,您仍然可以使用UPDATE TRIGGER解决此问题