我的触发器有问题,应该执行以下操作:(在北风上) 在插入触发器之后计算订单详细信息表中的价格总和,但它在订单表中名为 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
谁能告诉我它是如何工作的。
正如您可能猜到的那样,它不起作用。触发器不应返回任何
select
(您的第一个选择)。触发器假设使用虚拟表 inserted
和 deleted
。Insert into Orders.OrderTotal values (@Total)
毫无意义。它创建新的 orders
行,其中没有任何详细信息,例如 customerid
、employeeid
等。OrderDetails
中的 orderid
和 UPDATE
inserted
中的 orders.orderTotal
的行总计求和。
创建触发器总计 ON [dbo].[订单详情] 插入后 作为 开始
declare @Price float , @Quan int , @Dis float , @Total float
Select @Price = UnitPrice,
@Quan = Quantity,
@Dis = Discount
FROM inserted
set @Total= Sum(@Price * @Quan) - @Dis;
Insert into #OrdersOrderTotal values (@Total)
结束
亲爱的,这是正确的解决方案,您只是忘记了插入的表格,如果您想检查您的答案是否正确,请插入值并检查您的答案
插入[订单详情]值(11077,11,14.00,12,0)
选择总计,总和(总计) ( 从[订单详细信息]中选择 orderid ,productid , sum(UnitPrice * Quantity - Discount) 作为总计 按订单 ID、产品 ID 分组)a 其中订单 ID=11077 并且productiD=11 按总数分组