0

我正在使用 SQL Server 2008。我有一个记录 SKU 订单的表、一个包含计数的库存表以及一个记录已售 SKU 和库存项目之间关系的表。

最后,我得到了这样的报告

 Inventory CurrentQuantity OpenedOrder
   SKU1        300             50
   SKU2        100             10

每个订单将单独处理。处理每个订单后,如何让数据库自动更新库存平板电脑?

IE

如果订单中有 2 个 SKU1 已处理,库存表将自动显示 298。

谢谢

4

5 回答 5

2

我会使用存储过程,并一次执行订单插入和数量更新:

CREATE PROC dbo.ProcessOrder
    @Item int,
    @Quantity int
AS
BEGIN
    --Update order table here
    INSERT INTO dbo.Orders(ItemID,Quantity)
    VALUES (@ItemID, @Quantity)

    --Update Inventory here
    UPDATE dbo.Inventory
    SET CurrentQuantity = CurrentQuantity - Quantity
    WHERE ItemID = @ItemID


END
于 2012-03-31T19:26:06.793 回答
1

我认为你正在寻找的是一个触发器

基本上,设置一个触发器,该触发器将使用给定的插入/更新数据更新相应的列。没有完整的模式集,这是我目前能给出的最佳答案

于 2012-03-31T19:18:31.403 回答
0

可以使用trigger,也可以使用procedure,上面的具体步骤,使用procedure需要打开master DB中的atuo exec功能。

于 2012-04-01T01:39:21.033 回答
0

我不会为此寻找触发器。

我的退房流程

Start a transaction
Check stock level.
If OK, (optional validation / authorisation)
Add a check out record
Reduce the stock
Possibly add some record to invoice teh recipent etc.
Commit the transaction

虽然您可以使用触发器来做到这一点,但我根本没有看到这一点,一个很好的简单清晰和所有在一个地方 SP_CheckOut 存储过程是我要去的地方。

于 2012-03-31T19:29:46.417 回答
0

我通常会建议使用触发器,但股票操纵是一种通常会执行很多次的操作,有时是批量操作,老实说,这不是触发器的最佳方案。

我觉得 PKG 的想法很好,但是千万不要忘记给它加上事务控制,否则你会得到不匹配的股票:

CREATE PROC dbo.ProcessOrder
    @Item int,
    @Quantity int
AS
BEGIN
    begin transaction my_tran
    begin try 
        --Update order table here
        INSERT INTO dbo.Orders(ItemID,Quantity)
        VALUES (@ItemID, @Quantity)

        --Update Inventory here
        UPDATE dbo.Inventory
        SET CurrentQuantity = CurrentQuantity - Quantity
        WHERE ItemID = @ItemID
        commit transaction
    end try
    begin catch
        rollback transaction
        --raise error if necessary
    end catch
END
于 2012-03-31T22:08:39.560 回答