![](/img/trans.png)
[英]In a trigger how to insert values into another table but check if values already exists
[英]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.