请问同时UPDATE表本身,会不会死循环?

panjinfu80 2005-11-07 06:27:53
CREATE TRIGGER TR_CheckDetailMain ON [dbo].[PatrolRecord]
FOR INSERT, UPDATE
as
.....
update PatrolRecord set CheckFlag=1
where TermID=@TermID and RecordNumber=@RecordNumber
中间语句处理了一列动作后,再更新表本身,会不会重新触发UPDATE?会不会进入死循环?
这只为把数据记上已经处理标识的。
...全文
251 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ASPGuy 2005-11-08
  • 打赏
  • 举报
回复
允不允许触发器可以触发触发器是可以在服务管理器里面设置的
右键-〉服务器属性中的某个选项卡里的一个复选框
我个人不推荐触发器可以触发触发器
那样的程序将很难被控制
duoluohuifeng 2005-11-07
  • 打赏
  • 举报
回复
学习
vivianfdlpw 2005-11-07
  • 打赏
  • 举报
回复
递归触发器
当在 sp_dboption 中启用 recursive triggers 设置时,SQL Server 还允许触发器的递归调用。

递归触发器允许发生两种类型的递归:

间接递归


直接递归
使用间接递归时,应用程序更新表 T1,从而激发触发器 TR1,该触发器更新表 T2。在这种情况下,触发器 T2 将激发并更新 T1。

使用直接递归时,应用程序更新表 T1,从而激发触发器 TR1,该触发器更新表 T1。由于表 T1 被更新,触发器 TR1 再次激发,依此类推。

下例既使用了间接触发器递归,又使用了直接触发器递归。假定在表 T1 中定义了两个更新触发器 TR1 和 TR2。触发器 TR1 递归地更新表 T1。UPDATE 语句使 TR1 和 TR2 各执行一次。而 TR1 的执行将触发 TR1(递归)和 TR2 的执行。给定触发器的 inserted 和 deleted 表只包含与唤醒调用触发器的 UPDATE 语句相对应的行。



说明 只有启用 sp_dboption 的 recursive triggers 设置,才会发生上述行为。对于为给定事件定义的多个触发器,并没有确定的执行顺序。每个触发器都应是自包含的。


禁用 recursive triggers 设置只能禁止直接递归。若要也禁用间接递归,请使用 sp_configure 将 nested triggers 服务器选项设置为 0。

如果任一触发器执行了 ROLLBACK TRANSACTION 语句,则无论嵌套级是多少,都不会进一步执行其它触发器。

嵌套触发器
触发器最多可以嵌套 32 层。如果一个触发器更改了包含另一个触发器的表,则第二个触发器将激活,然后该触发器可以再调用第三个触发器,依此类推。如果链中任意一个触发器引发了无限循环,则会超出嵌套级限制,从而导致取消触发器。若要禁用嵌套触发器,请用 sp_configure 将 nested triggers 选项设置为 0(关闭)。默认配置允许嵌套触发器。如果嵌套触发器是关闭的,则也将禁用递归触发器,与 sp_dboption 的 recursive triggers 设置无关。

34,590

社区成员

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

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