SQL Server上插入检查库存现货

问题描述 投票:-3回答:1

我创建了使用Microsoft SQL Server 2014餐厅的清单。

这是diagram from 5 tables

我想写每当我插入新的订单到orderDetail表的触发器,从库存表就会自动更新outStockorderDetail.quantity,并基于该匹配stockLeft表中以前stockLeftproduct_ID

我很新的SQL服务器。任何意见/建议是对我很有帮助。谢谢!!

下面是我的表数据库

inventory and orderDetail

这是我到目前为止已经试过

    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

我可以运行此查询不错,但每当我更新orderDetail

INSERT INTO orderDetail(order_ID,product_ID, quantity) values (10101, 1013, 2)
GO

我得到这个错误

消息512,级别16,状态1,过程update_stock,第14行子查询返回多个值。这是当子查询如下=,!=,<,<=,>,> =,或当子查询用作表达不允许的。该语句已终止。

任何想法?

sql-server database triggers
1个回答
0
投票

您的触发器将仅适用于仅单独的插入工作。如果您将插入一次会失败几行。另外你是从基表,而不是INSERTED表中选择。这里是你的触发器应该是什么样子:

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
© www.soinside.com 2019 - 2024. All rights reserved.