T-SQL触发器更新

时间:2012-03-01 19:52:10

标签: tsql triggers

我有一个包含3个字段的表[ID,Name,LastUpdated] LastUpdated的默认值为“GetDate(),因此在添加新记录时会自动填充。

当我在TABLE上运行UPDATE时,我希望将此字段重置为当前的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子句,所有记录都会更新。

问题:
我在哪里可以获得UPDATE触发器上更新记录的ID值?

我是否正在更新Trigger中的表字段,重新调用新的Trigger事件(等等)?

3 个答案:

答案 0 :(得分:25)

从'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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

CREATE TRIGGER dbo.refreshModifyDate 
      ON  tStoreCategoriesImages
      FOR INSERT, UPDATE
AS 
  BEGIN
    SET NOCOUNT ON;
        update t set t.ModifyDate = getdate() from tStoreCategoriesImages t 
        inner join inserted i on i.ID = t.ID
  END
GO