Sql server SQL Server在插入时检查库存

Sql server SQL Server在插入时检查库存,sql-server,database,triggers,Sql Server,Database,Triggers,我正在使用Microsoft SQL Server 2014为一家餐厅创建清单 这是 我想为每当我向orderDetail表中插入新订单时,inventory中的表将自动更新outStock as orderDetail.quantity和stockLeft,该stockLeft基于表中与产品ID匹配的先前stockLeft 我对SQL Server非常陌生。任何意见/建议都会对我很有帮助。谢谢 这是我的表数据库 这就是我到目前为止所尝试的 USE [BuffaloWildWingsDB

我正在使用Microsoft SQL Server 2014为一家餐厅创建清单

这是

我想为每当我向orderDetail表中插入新订单时,inventory中的表将自动更新outStock as orderDetail.quantity和stockLeft,该stockLeft基于表中与产品ID匹配的先前stockLeft

我对SQL Server非常陌生。任何意见/建议都会对我很有帮助。谢谢

这是我的表数据库

这就是我到目前为止所尝试的

    USE [BuffaloWildWingsDB]
GO

CREATE TRIGGER update_stock
ON orderDetail
AFTER INSERT 
AS
BEGIN
    DECLARE @stock INT,@productID INT, @prevDate date, @prevStock INT;
    SET @stock = (SELECT quantity FROM orderDetail)
    SET @productID = (SELECT product_ID FROM orderDetail)
    SET @prevDate = (SELECT [date] FROM inventory WHERE inventory.product_ID = @productID AND [date] < GETDATE())
    SET @prevStock = (SELECT stockLeft FROM inventory WHERE [date] = @prevDate)
    INSERT INTO inventory (product_ID, outStock, stockLeft) VALUES (@productID,@stock,@prevStock-@stock);
END
我犯了这个错误

Msg 512,16级,状态1,程序更新库存,第14行子查询 返回的值超过1个。当子查询 如下=,!=,=或者当子查询用作 表示声明已终止


有什么想法吗?

您的触发器只适用于单独的插入。如果一次插入几行,则会失败。此外,您正在从基表中选择,而不是从插入的表中选择。以下是触发器的外观:

insert into inventory (product_id, outStock, stockLeft)
select i.product_id, i.quantity, isnull(oa.stockLeft, 0) - i.quantity
from inserted i
outer apply(select top 1 stockLeft 
            from inventory 
            where product_id = i.product_id and [date] < GETDATE()
            order by [date] desc)oa

我更新了问题。我不知道如何制作一个函数来检查前一个日期中相同产品ID的值。如果您能提供任何帮助,我们将不胜感激。@ruong,如果答案能回答您的问题,为什么不接受呢?
insert into inventory (product_id, outStock, stockLeft)
select i.product_id, i.quantity, isnull(oa.stockLeft, 0) - i.quantity
from inserted i
outer apply(select top 1 stockLeft 
            from inventory 
            where product_id = i.product_id and [date] < GETDATE()
            order by [date] desc)oa