触发更新,如果另一个字段更改为某个值,则更新一个字段

时间:2016-05-19 01:24:29

标签: sql-server triggers

我想在更新时创建触发器。涉及两个表,圆柱和工作。当圆柱体中的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
)

1 个答案:

答案 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