Sql server SQL Server递减资源清册
我正在使用SQLServer2008。我有一个记录SKU订单的表,一个记录盘点的库存表,以及一个记录SKU销售和库存项目之间关系的表 最后,我得到了这样的报告Sql server SQL Server递减资源清册,sql-server,inventory,Sql Server,Inventory,我正在使用SQLServer2008。我有一个记录SKU订单的表,一个记录盘点的库存表,以及一个记录SKU销售和库存项目之间关系的表 最后,我得到了这样的报告 Inventory CurrentQuantity OpenedOrder SKU1 300 50 SKU2 100 10 每个订单将单独处理。如何让数据库在处理每个订单后自动更新库存平板电脑 i、 e 如果订单中有2个SKU1已处理,库存表将自动
Inventory CurrentQuantity OpenedOrder
SKU1 300 50
SKU2 100 10
每个订单将单独处理。如何让数据库在处理每个订单后自动更新库存平板电脑
i、 e
如果订单中有2个SKU1已处理,库存表将自动显示298
谢谢我想你要找的是
基本上,设置一个触发器,该触发器将使用给定的插入/更新数据更新相应的列。如果没有完整的模式集,这是我目前能给出的最好答案我想你要找的是一个
基本上,设置一个触发器,该触发器将使用给定的插入/更新数据更新相应的列。如果没有完整的模式集,这是目前我能给出的最佳答案,我将使用存储过程,一次点击即可执行订单插入和数量更新:
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
我将使用存储过程,一次性执行订单插入和数量更新:
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
我自己也不会为这件事担心 我的结账流程
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存储过程。我不会亲自查看触发器 我的结账流程
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存储过程。我通常建议使用触发器,但股票操纵是一种通常要做很多次的操作,有时候是批量的,老实说,这不是触发器的最佳场景 我认为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
我通常会建议使用触发器,但股票操纵是一种操作,通常会执行很多次,有时是成批操作,老实说,这不是触发器的最佳方案 我认为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
您可以使用触发器,也可以使用过程,以及顶部的特定步骤,使用过程需要在mastaer DB中打开atuo exec功能。您可以使用触发器,也可以使用过程,以及顶部的特定步骤,使用过程需要在mastaer DB中打开atuo exec功能。我对您的想法投了赞成票,但我用事务控制增强了它。这是非常重要的。看看我的答案。如果CurrentQuantity=0会发生什么?业务规则是否接受-1的库存级别?此进程运行前的检查不能保证CurrentQuantity仍然具有正值。我投票赞成您的想法,但我通过事务控制对其进行了增强。这是非常重要的。看看我的答案。如果CurrentQuantity=0会发生什么?业务规则是否接受-1的库存级别?此过程运行前的检查不能保证CurrentQuantity仍然具有正值。