首页 新闻 搜索 专区 学院

超出存储过程、函数、触发器或视图的最大嵌套层数

0
悬赏园豆:40 [已解决问题] 解决于 2011-02-24 14:15

我的触发器:

ALTER TRIGGER [Trig_Update]
   ON  [dbo].[Zc_Goods]
   for update
AS
declare @goodsname  nvarchar(50),@goodstype nvarchar(50),@goodsunit nvarchar(50),@goodsnum nvarchar(50),@remark nvarchar(50)


select @goodsname=[GoodsName],@goodstype=[GoodsType],@goodsunit=[GoodsUnit],@goodsnum=[GoodsNum],@remark=[GoodsRemark] from inserted
BEGIN
 INSERT INTO [ZcStore].[dbo].[Zc_InStock]
           (
             [AddTime]
           )
     VALUES
           (
            CONVERT(varchar(100), GETDATE(), 25)
           )
END

这样写能够执行。

当我添加多行时,也就是:

INSERT INTO [ZcStore].[dbo].[Zc_InStock]
           (
             [NameKind]
           ,[Name]
           ,[Ggxh]
           ,[Dw]
           ,[Num]
           ,[AddTime]
           ,[Remark])
     VALUES
           (@goodsname,@goodstype,@goodsunit,@goodsnum,CONVERT(varchar(100), GETDATE(), 25),@remark)
就会出现:超出存储过程、函数、触发器或视图的最大嵌套层数

请问哪位能帮我解决一下,小弟实在是搞不明白!

追梦浪子的主页 追梦浪子 | 初学一级 | 园豆:40
提问于:2011-02-22 20:35
< >
分享
最佳答案
0

应该是多个触发器相互影响造成的,你看看关于Zc_InStock的触发器有没有操作Zc_Goods

收获园豆:20
彭汉生 | 小虾三级 |园豆:1233 | 2011-02-23 09:09
是的!我的触发器在另一个表中产生循环了!!!
追梦浪子 | 园豆:40 (初学一级) | 2011-02-24 14:14
其他回答(2)
0

估计是多个触发器出现迭代调用。

尽管触发器是一种存储过程,但是不能使用Execute 语句调用它, 如果有希望共享触发器和正常的存储过程的编码,那么只需把共享代码放在存储过程中,从触发器中调用它。如果一个触发器修改一个表,那么这些修改可能会激活 另一个触发器,或者本身。在默认情况下,SQL Sever 允许这种嵌套的触发器调用深度为32层。虽然我们建议允许嵌套的和叠代的触发器,但是可以使用系统存储过程禁止这么做。下面的语句在指定的数据库上防止叠代触发器:

sp_dboption AppDta,`recursive triggers',`false'

为了在所有数据库中防止嵌套触发器调用(包括叠代调用),可以使用下面的语句:

sp_configure `nested triggers',0

http://www.cnblogs.com/downmoon/archive/2007/12/29/1019663.html

收获园豆:20
邀月 | 园豆:25375 (高人七级) | 2011-02-23 09:35
十分感谢!!
支持(0) 反对(0) 追梦浪子 | 园豆:40 (初学一级) | 2011-02-24 14:14
0

ALTER TRIGGER [Trig_Update]
   ON  [dbo].[Zc_Goods]
   for update

@goodsname  nvarchar(50),

@goodstype nvarchar(50),

@goodsunit nvarchar(50),

@goodsnum nvarchar(50),

@remark nvarchar(50)
AS

BEGIN 
select @goodsname=[GoodsName],@goodstype=[GoodsType],@goodsunit=[GoodsUnit],@goodsnum=[GoodsNum],@remark=[GoodsRemark] from inserted

END

GO;


INSERT INTO [ZcStore].[dbo].[Zc_InStock]
           (
             [NameKind]
           ,[Name]
           ,[Ggxh]
           ,[Dw]
           ,[Num]
           ,[AddTime]
           ,[Remark])
     VALUES
           (@goodsname,@goodstype,@goodsunit,@goodsnum,CONVERT(varchar(100), GETDATE(), 25),@remark)

爱研究源码的javaer | 园豆:930 (小虾三级) | 2011-02-23 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册