2016-05-19 86 views
0

我想在更新時創建觸發器。有兩個表涉及圓筒和工作。當柱面中的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

是否值2的每一個變化?你能舉出更多規則的例子嗎? –

+0

該值更改爲約40個不同的值。 2代表氣缸運出。最終結果是當值更改爲2時,觸發器檢查作業表以查看它是否會返回。如果是在每個表中設置標誌。當氣瓶回到工廠時,標誌將會改回。 –

+0

在氣缸運出之後,statusId在返回之前仍然可以被系統中的其他事物改變。我正在尋找一種方法來標記它離開並回來 –

回答

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 
相關問題