none
不是吧?超出了存储过程、函数、触发器或视图的最大嵌套层数? RRS feed

  • 问题

  • 一个简单 的触发器啊,到最后一个用户触发时,就报错了:
    超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。

    CREATE TRIGGER [day_list_up] ON [dbo].[day_work_list]
    FOR   UPDATE
    AS


    declare @w_id int
    select @w_id=work_id from inserted

    --如果任务表,表体中的状态都已经设置为‘完成’,就更新主表的状态字段
    if    not exists (select * from day_work_list where work_id=@w_id and state=0)
    begin
    update day_work set state=1 where work_id=@w_id
    end

     

    2009年7月16日 6:14

答案

全部回复

  • 你好,你更新了,又会重新触 Update 触发器。这样会无限循环下去。
    知识改变命运,奋斗成就人生!
    2009年7月16日 7:30
  • day_work 表上也创建了 update 触发器?
    子陌红尘一曲箫,翠华仙逝水迢迢;往来多少残萤火,只照流水旧枫桥。
    2009年7月16日 8:06
  • day_work表存在觸發器,並且有對day_work_list 操作。造成觸發器的死循環。

    以下是判斷層數時的方法
    if @@NESTLEVEL!<32
    return--調用時,循環時用break

    ROY WU(吳熹 )
    2009年7月16日 9:19
    版主
  • 是的,真是这样,我检查了一下啊,在day_work确实存在update触发器。谢谢。找到问题原因
    2009年7月17日 8:33
  • CREATE TRIGGER [day_list_up] ON [dbo].[day_work_list]
    FOR   UPDATE
    AS


    declare @w_id int
    select @w_id=work_id from inserted

    --如果任务表,表体中的状态都已经设置为‘完成’,就更新主表的状态字段
    if    not exists (select * from day_work_list where work_id=@w_id and state=0)
    begin
    update day_work set state=1 where work_id=@w_id and state!=1
    end

    • 已建议为答案 SQL STUDIO 2009年9月28日 10:57
    2009年9月27日 14:57