我正在使用SQL Server 2008.我有一个表格,其中记录了SKU的订单,一个有计数的库存表和一个表格,其中记录了销售的SKU和库存项目之间的关系。
最后,我得到了这样的报告
Inventory CurrentQuantity OpenedOrder
SKU1 300 50
SKU2 100 10
每个订单将单独处理。如何在处理完每个订单后让数据库自动更新库存平板电脑?
即
如果订单中有2个SKU1被处理,则库存表将自动显示298。
由于
答案 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功能。