mysql 触发northwind

eni9jsuy  于 12个月前  发布在  Mysql
关注(0)|答案(2)|浏览(127)

我有一个触发器的问题,应该这样做:(在北风)后插入触发器,计算订单明细表中的价格总和,但它在一个新的属性命名为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

字符串
谁能告诉我它是如何工作的。

k4emjkb1

k4emjkb11#

正如你可能猜到的那样,它不起作用。触发器不应该返回任何select(你的第一个选择)。触发器应该使用虚拟表inserteddeleted
最后,Insert into Orders.OrderTotal values (@Total)毫无意义,它创建了新的orders行,其中没有任何细节,如customeridemployeeid等。
尝试使用insertedUPDATEorders.orderTotal中的orderidOrderDetails中的linetotal求和。

mjqavswn

mjqavswn2#

CREATE TRIGGER totalsum
    ON  [dbo].[Order Details]
    AFTER INSERT
AS
BEGIN
        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)
END

字符串
我亲爱的这是正确的解决方案,你只是忘记了插入的表,如果你想检查你的ans是正确的或不这样插入的值,并检查你的ans

INSERT INTO [Order Details] VALUES (11077,11,14.00,12,0)

SELECT total, SUM(total) FROM
(
    SELECT
        orderid, productid, SUM(UnitPrice * Quantity - Discount) AS total
    FROM
        [Order Details]
    GROUP BY
        OrderID, ProductID
) a
WHERE
    OrderID = 11077
    AND productiD = 11
GROUP BY
    total

相关问题