我想在更新时创建触发器。涉及两个表,圆柱和工作。当圆柱体中的statusId变为某个值时,如果它改变了两个表中的标志字段。圆柱表经常更新。我相信如果statusId字段更改为我的值2,我需要检查它看到的插入和删除的表。
以下是我的表格的简单版本。他们通过jobNumb
相关CREATE TABLE Cylinder (
cylinderId int IDENTITY(1,1) PRIMARY KEY,
jobNumb int NOT NULL,
statusId int,
flag int
)
CREATE TABLE Jobs (
jobId int IDENTITY(1,1) PRIMARY KEY,
jobNumb int NOT NULL,
statusId int,
reShip int,
flag int
)
答案 0 :(得分:1)
嗯,您需要2个不同的更新语句,因为更新语句只能更新单个表
但是,如果两个表中的标志应始终与相关行的值相同,则可以通过在此列上添加on update cascade
的外键约束来实现此目的。
更新触发器如下所示:
CREATE TRIGGER ON Cylinder
FOR UPDATE
AS
-- updates jobs flag
UPDATE j
SET flag = CASE WHEN i.statusId = 2 THEN 1 ELSE 0 END -- or whatever values suited for your flag
FROM inserted i
INNER JOIN deleted d ON(i.cylinderId = d.cylinderId AND i.statusId <> d.statusId)
INNER JOIN Jobs j ON(i.jobNumb = j.jobNumb)
-- updates cyliner flag
UPDATE c
SET flag = CASE WHEN i.statusId = 2 THEN 1 ELSE 0 END -- or whatever values suited for your flag
FROM inserted i
INNER JOIN deleted d ON(i.cylinderId = d.cylinderId AND i.statusId <> d.statusId)
INNER JOIN Cylinder c ON(i.jobNumb = c.jobNumb)
GO