【问题标题】:Maximum Nesting of levels in SQL Server after trigger触发后 SQL Server 中的最大级别嵌套
【发布时间】:2018-04-23 19:35:37
【问题描述】:

我创建了一个新触发器,可以让我在更新后创建一个日志,但是即使我认为它应该可以工作,但我得到了以下错误:

超过了视图、存储过程、函数或触发器的最大嵌套级别(限制:32)。

会不会跟触发器的写法有关系?

ALTER TRIGGER [TR_Log_Notes]
ON ALUMNS
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @Note_Text VARCHAR (30)
    SET @Note_Text = 'Fields were updated'

    INSERT INTO Log_Notes(Alumn_ID, Note_Text)
        SELECT i.Alumn_ID, @NoteText 
        FROM INSERTED i
END

【问题讨论】:

  • Log_Notes 表上是否还有另一个触发器?
  • 是的,目前有 3 个
  • 可能是其中一个触发器导致了错误。您需要为他们发布代码,以便我们帮助找到它。您在上面发布的 ALUMNS 上的触发器很好。
  • 这里有点不对劲。您不能拥有与同一架构中的表同名的触发器。显然你已经改变了一些东西,因为这不会像发布的那样工作。您会收到重复的对象名称错误。数据库中已经有一个名为“Log_Notes”的对象。
  • 你说得对,对不起,名字是TR_Log_Notes 谢谢

标签: sql sql-server triggers


【解决方案1】:

您正在插入log_notes 更新同一个表中的一行。这真的是你想要的吗?

如果您确实想要同一个表,那么您应该使用for 触发器,并在每一行进入表之前对其进行更新。但是,我怀疑您想在不同的表上创建触发器。

【讨论】:

  • 您好,是的,我在 ALUMNS 表上创建了触发器,我的目的是在 ALUMNS 更新后将数据插入 LOG_NOTES 谢谢
猜你喜欢
  • 2022-07-20
  • 2014-06-07
  • 2023-03-11
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
相关资源
最近更新 更多