如何控制触发器的互相触发???

dobonle 2000-08-08 08:54:00
SQL SERVER 中,表A的触发器功能是更新表B,表B的触发器功能是更新表A,当更新一个表时,是不是会死循环?如何控制?
...全文
236 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pjy 2000-08-08
  • 打赏
  • 举报
回复
How to set the nested trigger option (Enterprise Manager)
To set the nested trigger option

Expand a server group.
Right-click a server; then click Properties.
Click the Server Settings tab.
In the Server behavior box, select or clear Allow triggers to be fired which fire other triggers (nested triggers).

xubin_sh 2000-08-08
  • 打赏
  • 举报
回复
sp_configure [[@configname =] 'nested triggers'] [,[@configvalue =] '0|1']

dobonle 2000-08-08
  • 打赏
  • 举报
回复
请问PJY
nested trigger的值在哪里设定??
pjy 2000-08-08
  • 打赏
  • 举报
回复
将配置选项nested trigger的值由1变为0,将阻止被嵌套的触发器执行!
xubin_sh 2000-08-08
  • 打赏
  • 举报
回复
Sql Server中有个公用变量 @@NESTLEVEL 可以返回当前嵌套的层数
例子
IF @@NESTLEVEL > 31
RETURN
ELSE
BEGIN
...
...
END
huntout 2000-08-08
  • 打赏
  • 举报
回复
有一個簡單的辦法,給表增加一個bit字段,default為0。正常的更新不用管它,觸發器裡更新則將此字段設為1。這樣就可以控制了。
dobonle 2000-08-08
  • 打赏
  • 举报
回复
我也知道要出错,关键是如何控制?
一,有没有地方可以设置触发参数,触发器之间循环一次,即停止。
二,如果第一种方法不行的话,是不是可以判断是谁产生的更新?如果是触发器产生的更新就做一标记,如果是其他东西产生的更新就做另一标记。
先每人送20分作为鼓励。解决之后有高分相送。
gawj 2000-08-08
  • 打赏
  • 举报
回复
不一定会出错我以前Bom程序里求低层码经常用递归触发。关键要控制出口。我相信你在里面应该
测试Update(column_name)符合条件的再Update 或 Insert
huntout 2000-08-08
  • 打赏
  • 举报
回复
我做了一個實驗,的確象xubin_sh說得那樣,會出錯,進程調用最多達到32層。

Server: Msg 217, Level 16, State 1, Procedure ChooseValue, Line 9
Maximum stored procedure nesting level exceeded (limit 32).
xubin_sh 2000-08-08
  • 打赏
  • 举报
回复
直接或间接触发本表,这个被称为“递归触发(Recursive triggers)”
作用于数据库一级
确省是关闭的
T-SQL:
sp_dboption [[@dbname =] 'database']
[, [@optname =] 'recursive triggers']
[, [@optvalue =] 'true|false']
“递归触发”或“嵌套触发(Nested Triggers)”最多可以达到32层,如果超过32层,则全部“回滚(Rollback)”
以上观点可能有错误,希望指点

neil 2000-08-08
  • 打赏
  • 举报
回复
期待回答

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧