Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server递减资源清册_Sql Server_Inventory - Fatal编程技术网

Sql server SQL Server递减资源清册

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已处理,库存表将自动

我正在使用SQLServer2008。我有一个记录SKU订单的表,一个记录盘点的库存表,以及一个记录SKU销售和库存项目之间关系的表

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

 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仍然具有正值。