SQL Server减少库存

时间:2012-03-31 19:14:37

标签: sql-server inventory

我正在使用SQL Server 2008.我有一个表格,其中记录了SKU的订单,一个有计数的库存表和一个表格,其中记录了销售的SKU和库存项目之间的关系。

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

 Inventory CurrentQuantity OpenedOrder
   SKU1        300             50
   SKU2        100             10

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

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

由于

5 个答案:

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

答案 1 :(得分:1)

我认为你要找的是trigger

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

答案 2 :(得分: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存储过程就在我要去的地方。

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

答案 4 :(得分:0)

你可以使用触发器,也可以使用程序,以及顶部的具体步骤,使用程序需要在mastaer DB中打开atuo exec功能。