【发布时间】:2015-11-28 07:48:16
【问题描述】:
我正在使用 Microsoft SQL Server 2014 为餐厅创建库存。
我想为每当我将新订单插入orderDetail 表时编写一个触发器,库存中的表将自动更新outStock 为orderDetail.quantity 和stockLeft 基于表中先前的stockLeft匹配product_ID。
我对 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
我可以很好地运行此查询,但每当我更新 orderDetail 时
INSERT INTO orderDetail(order_ID,product_ID, quantity) values (10101, 1013, 2)
GO
我收到了这个错误
消息 512,级别 16,状态 1,过程 update_stock,第 14 行子查询 返回超过 1 个值。子查询时不允许这样做 遵循 =、!=、、>= 或当子查询用作 表达。声明已终止。
有什么想法吗?
【问题讨论】:
-
我更新了问题。我不知道如何创建一个 FUNCTION 来检查上一个日期相同 product_ID 的值。任何帮助将不胜感激。
标签: sql-server database triggers