Sql-Server

使用觸發器創建重複項

  • May 6, 2021

如果將新行插入 table1(至少我認為),我已經創建了一個觸發器來惰性化 table2。查詢是這樣的:

CREATE TRIGGER project_insert
ON TABLE1
AFTER INSERT
AS
BEGIN
Insert into TABLE2 (ProjectID, Status, Period)
SELECT 
   ProjectID
 , Status
 , Period = concat(FORMAT(GETDATE(), 'yyy'), FORMAT(GETDATE(), 'MM'))
FROM TABLE1
WHERE Status in (1, 2)

這似乎有效,因為它在我將項目添加到 table1 後插入項目,但是每次我添加一個新項目時,觸發器似乎為每個項目插入一個新行,我在 table1 中。我希望它只添加新項目。

這是可行的嗎?謝謝!

您需要使用特殊的虛擬表 INSERTED 表示已插入的行導致觸發器觸發並使用 PK 將其加入到您的 Table2 (我認為在這種情況下為 ProjectID)

Insert into TABLE2 (ProjectID, Status, Period)
SELECT 
   ProjectID
 , Status
 , Period = concat(FORMAT(GETDATE(), 'yyy'), FORMAT(GETDATE(), 'MM'))
FROM TABLE1 T
INNER JOIN INSERTED I ON
 T.ProjectID = i.ProjectID
WHERE Status in (1, 2)

引用自:https://dba.stackexchange.com/questions/291107