我有一个触发器的问题,应该这样做:(在北风)后插入触发器,计算订单明细表中的价格总和,但它在一个新的属性命名为OrderTotal的订单表
我试过了,但不管用
CREATE TRIGGER TotalCalc
ON dbo.OrderDetails
AFTER INSERT
AS declare @Price float , @Quan int , @Dis float , @Total float
BEGIN
SELECT Orders.OrderId From Orders
Select @Price = OrderDetails.UnitPrice,
@Quan = OrderDetails.Quantity,
@Dis = OrderDetails.Discount,
@Total = Orders.OrderTotal
FROM OrderDetails INNER JOIN
Orders ON OrderDetails.OrderID = Orders.OrderId
SET @Total = Sum(@Price * @Quan) - @Dis;
Insert into Orders.OrderTotal values (@Total)
END
GO
字符串
谁能告诉我它是如何工作的。
2条答案
按热度按时间k4emjkb11#
正如你可能猜到的那样,它不起作用。触发器不应该返回任何
select
(你的第一个选择)。触发器应该使用虚拟表inserted
和deleted
。最后,
Insert into Orders.OrderTotal values (@Total)
毫无意义,它创建了新的orders
行,其中没有任何细节,如customerid
,employeeid
等。尝试使用
inserted
和UPDATEorders.orderTotal
中的orderid
对OrderDetails
中的linetotal求和。mjqavswn2#
字符串
我亲爱的这是正确的解决方案,你只是忘记了插入的表,如果你想检查你的ans是正确的或不这样插入的值,并检查你的ans
型