簡體   English   中英

使用觸發器將值插入另一個表,除非值存在,在這種情況下更新

[英]Using a trigger to insert values into another table unless value exists in which case update

我有一個表(Table1),它包含三列: 'ID' 、 'Status' 、 'Title'。 我有第二個表 (Table2),它包含三列: 'ID' 、 'Table1ID' 、 'Title'。

ID 是一個序號值,title 是一個字母數字值,status 的值為 0 或 1。當在 Table1 中創建記錄時,從值 0 開始。

我想要實現的是一個觸發器:當 [Table1].Status 從值 0 更改為 1 時,將一個新行插入到 [Table2] 中,其值為 [Table1].ID 到 [Table2].Table1ID 和[Table1].Title 到 [Table2].Title 僅更新記錄在 [Table1]。

但是,如果 [Table2].Table1ID 在更新后的值上已經有 [Table1].ID 的匹配值,那么應該簡單地更新 [Table2].Title 的值而不是插入新行。

這是我迄今為止嘗試過的:

Create Trigger [dbo].[test]
ON [dbo].[Table1]
After Update
As Begin
Set NOCOUNT ON;
IF UPDATE (Status)
Begin
INSERT INTO [Table2]
VALUES ((SELECT DISTINCT ID FROM INSERTED WHERE NOT EXISTS (SELECT * FROM TABLE2 WHERE TABLE2.TABLE1ID = INSERTED.ID)))

END
END
Go

如果我了解所有要求,我認為您需要這樣的東西。 首先它只會在狀態改變時更新 Table2。 由於您正在更新標題,我認為您會在標題的值發生變化時更新它,但這不是您所說的。

然后它會插入任何不存在的行。

請注意,無論行如何在單個更新語句中更新,這都將起作用。

Create Trigger [dbo].[test]
ON [dbo].[Table1]
After Update
As Begin
    Set NOCOUNT ON;

    --first we need to update any existing rows in Table2
    update t2
    set Title = i.Title
    from inserted i
    join deleted d on d.ID = i.ID 
    join Table2 t2 on t2.ID = i.ID
    where d.Status = 0 --only where the row in Table1 has a status of 0
        and i.Status = 1 --only when the new value has status = 1

    --now we can insert any rows that don't already exist into Table2
    INSERT INTO [Table2]
    (
        ID
        , Title
    )
    SELECT i.ID
        , i.Title 
    FROM INSERTED i
    WHERE NOT EXISTS 
    (
        SELECT * 
        FROM TABLE2 
        WHERE TABLE2.TABLE1ID = i.ID
    )

END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM