2012-03-01 234 views
11

我有一個包含3個字段[ID,Name,LastUpdated]的表。
LASTUPDATED有GETDATE(的」默認值),所以它會自動填寫自己當增加一個新的記錄。T-SQL觸發器更新

當我改爲運行上表的更新,我想有這個領域本身重置爲當前GETDATE ()

CREATE TRIGGER dbo.Table1_Updated 
    ON dbo.Table1 
    AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE dbo.Table1 SET LastUpdated = GETDATE() 
END 
GO 

但是因爲我沒有WHERE子句,所有記錄得到更新

問:
我會在哪裏得到更新的記錄的ID的價值UPD ATE觸發器?

我是否正在更新Trigger中的表的字段,重新調用新的Trigger事件(以此類推)?

+0

@Damien_The_Unbeliever知道我明白這一點,但這個線程,不過是爲了我理解的概念樣本。這不是真正的代碼。 – 2012-03-02 21:22:16

回答

21

從'INSERTED',INSERTED表對於INSERT,UPDATE觸發器都是通用的。

CREATE TRIGGER dbo.Table1_Updated 
ON dbo.Table1 
FOR INSERT, UPDATE /* Fire this trigger when a row is INSERTed or UPDATEd */ 
AS BEGIN 
    UPDATE dbo.Table1 SET dbo.Table1.LastUpdated = GETDATE() 
    FROM INSERTED 
    WHERE inserted.id=Table1.id 
END 
+0

所以即使TSQL只是在任何字段上執行UPDATE,在觸發器內部我會去查找插入的虛擬表?順便說一句,我需要把插入...即使我只需要更新? – 2012-03-01 20:19:30

1
Update table1 
set LastUpdated = getdate() 
from inserted i, table1 a 
where i.pk1 = a.pk1 
+0

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=57227 – 2012-03-01 20:04:46