每当 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
我创建了 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