【问题标题】:Creating an INSERT TRIGGER that updates CreatedBy and UpdatedBy without firing the UPDATE TRIGGER on same table创建一个更新 CreatedBy 和 UpdatedBy 的 INSERT TRIGGER,而不在同一个表上触发 UPDATE TRIGGER
【发布时间】:2016-10-05 18:54:11
【问题描述】:

我正在尝试在我的数据库中管理 CreatedBy 和 UpdatedBy 字段的所有表上创建一个 INSERT TRIGGER 和 UPDATE TRIGGER。

我遇到的问题是我的 INSERT 触发器中有以下内容:

UPDATE MyTable
SET CreatedBy = INSERTED.CreatedBy, 
    InsertDate = GetDate(), 
    UpdatedBy = INSERTED.UpdatedBy, 
    UpdateDate = GetDate() 
FROM INSERTED 
WHERE MyTable.Id = INSERTED.Id

问题是这个 UPDATE 语句另外触发了 UPDATE 触发器。我不能让这种情况发生。我怎样才能防止这种情况发生?

【问题讨论】:

  • 这是 MyTable 上的插入触发器吗?
  • 请提供触发器的完整定义
  • 是 MyTable 是正在运行触发器的表。问题是插入触发器使用更新语句来设置 createdby 和 updatedby 字段。这是触发更新触发器。我需要避免这种情况发生。请查看我发布的答案,如果你们有更好的解决方案,请告诉我!
  • 为什么需要用正在插入的值更新要插入的表?我还认为您不应该在插入中设置更新的列,这是插入而不是更新。为什么不使用默认的 getdate() 使这些列不为空。还是在插入表后立即创建一个代替触发器而不是更新表?

标签: sql sql-server sql-server-2008 triggers


【解决方案1】:

我发现了一个名为 IF TRIGGER_NESTLEVEL() 的内置 SQL 函数。

我能够使用以下内容包装更新触发器,以防止在插入触发器运行时更​​新触发器运行:

IF  TRIGGER_NESTLEVEL() < 2
  --Trigger script here
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多