每当 SaleOrderDetail 中的订单项发生更改时,触发将更改日期和时间放入订单 table 的 LastModified 列中

Trigger to put the change date and time in the LastModified column of the Order table whenever an order item in SaleOrderDetail is changed

我创建了 table 如下:

CREATE TABLE Customer
(
    CustomerID INT PRIMARY KEY,
    CustomerLName VARCHAR(30),
    CustomerFName VARCHAR(30)
);

CREATE TABLE SaleOrder
(
    OrderID INT IDENTITY PRIMARY KEY,
    CustomerID INT REFERENCES Customer(CustomerID),
    OrderDate DATE,
    LastModified datetime
);

CREATE TABLE SaleOrderDetail
( 
    OrderID INT REFERENCES SaleOrder(OrderID),
    ProductID INT,
    Quantity INT,
    UnitPrice INT,
    PRIMARY KEY (OrderID, ProductID)
);

我需要验证此查询是否正确或需要进行哪些更改。

CREATE TRIGGER [dbo].[tr_Modify]
ON dbo.SaleOrder
AFTER Update
AS
BEGIN
    SET NOCOUNT on;

    IF UPDATE (OrderID)
    BEGIN
        UPDATE SaleOrder
        SET LastModified = GETDATE()
        FROM SaleOrder o
        INNER JOIN SaleOrderDetail od ON o.OrderID = od.OrderID
        WHERE o.OrderID <> od.OrderID
    END
END

我认为语法是正确的,但由于 OrderID 是身份 PK,因此无法更新,因此触发器永远不会触发。

如果您尝试从 SaleOrderDetail 上的更新更新 salesOrder 中的最后修改,应该执行以下操作:

CREATE TRIGGER [dbo].[tr_Modify2]
ON dbo.SaleOrderDetail
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT on;

    BEGIN
        UPDATE SaleOrder
        SET LastModified = GETDATE()
        FROM
            SaleOrder o
            INNER JOIN INSERTED INS ON INS.orderid = o.orderid

    END
END