触发器的执行顺序是什么??

xlhl 2005-11-10 05:37:40
某张表有多个触发器
是否可以设置触发器的执行顺序.
...全文
1010 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vivianfdlpw 2005-11-10
  • 打赏
  • 举报
回复
sp_settriggerorder
指定第一个或最后一个激发的、与表关联的 AFTER 触发器。在第一个和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行。

语法
sp_settriggerorder[@triggername = ] 'triggername'
, [@order = ] 'value'
, [@stmttype = ] 'statement_type'

参数
[@triggername =] 'triggername'

是将要设置或更改顺序的触发器的名称。triggername 的数据类型为 sysname。如果此名称与触发器不对应或此名称对应于 INSTEAD OF 触发器,该过程将返回错误。

[@order =] 'value'

是新触发器顺序的设置。value 的数据类型为 varchar(10),可以是下列值中的任何一个。



重要 First 和 Last 触发器必须是两个不同的触发器。


值 描述
First 最先激发的触发器。
Last 最后激发的触发器。
None 以未定义的顺序激发的触发器。


[@stmttype = ] 'statement_type'

指定哪条 SQL 语句激发触发器。statement_type 的数据类型为 varchar(10),可以是 INSERT、UPDATE 或 DELETE。只有在触发器已经定义为某种语句类型的触发器后,才能将其指派为该语句类型的 First 或 Last 触发器。例如,如果 TR1 定义为 INSERT 触发器,则可以将表 T1 上的 INSERT 触发器 TR1 指派为 First 触发器。如果将只定义为 INSERT 触发器的 TR1 设置为 UPDATE 语句的 First(或 Last)触发器,则 SQL Server 将返回错误信息。有关更多信息,请参见注释部分。

返回代码值
0(成功)或 1(失败)

注释
单个表上的每个 INSERT、UPDATE 或 DELETE 语句只能有一个 First 和一个 Last 触发器。

如果在表上已定义了 First 触发器,则不能指派新触发器作为同一操作(INSERT、UPDATE 或 DELETE)的同一表的 First 触发器。此限制也适用于 Last 触发器。

作为 SQL Server 复制的一部分,可在已发布表上指派 First 触发器;然而,如果与用户定义的触发器存在冲突,则必须在表发布之前将用户定义触发器的指派更改为 None。

如果 ALTER TRIGGER 语句更改第一个或最后一个触发器,则除去最初在触发器上设置的 First 或 Last 特性,并且替换为 None。顺序值必须用 sp_settriggerorder 重新设置。

如果必须将同一触发器指派为多个语句类型的第一个或最后一个顺序,则必须为每个语句类型执行 sp_settriggerorder。而且,在可以将触发器指派为某个语句类型激发的 First 或 Last 触发器之前,必须先将其定义为该语句类型。

权限
触发器所有者以及在其上定义触发器的表所有者拥有 sp_settriggerorder 的执行许可权限。当前数据库中的 db_owner 和 db_ddladmin 角色成员以及 sysadmin 服务器角色成员可以执行该存储过程。

示例
sp_settriggerorder @triggername= 'MyTrigger', @order='first', @stmttype = 'UPDATE'

zjcxc 2005-11-10
  • 打赏
  • 举报
回复
所以, 如果你的触发器不是instead of, 而且每类(insert,update或者delete)超过3个, 就恭喜你了, 你完全可以控制其顺序
zjcxc 2005-11-10
  • 打赏
  • 举报
回复
可用 sp_settriggerorder 指定表上第一个和最后一个执行的 AFTER 触发器。在表上只能为每个 INSERT、UPDATE 和 DELETE 操作指定一个第一个执行和一个最后一个执行的 AFTER 触发器。如果同一表上还有其它 AFTER 触发器,则这些触发器将以随机顺序执行。

如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器,则将除去已修改触发器上设置的第一个或最后一个特性,而且必须用 sp_settriggerorder 重置排序值。
wangdehao 2005-11-10
  • 打赏
  • 举报
回复
不可以,每张表上的每种触发器只能有一个(insert,delete,update),你可以按顺序在触发器中写你的sql语句
WangZWang 2005-11-10
  • 打赏
  • 举报
回复
同种类型更新的不行,它是自动触发,由对表的更新类型来触发。
建议同种更新类型的触发器最好合并一个来写,这样就
可以先执行什么,后执行什么

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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