sp_settriggerorder (Transact-SQL)
 
 

本主题适用于:SQL Server(从 2008 开始)Azure SQL 数据库Azure SQL 数据仓库并行数据仓库

指定第一个激发或最后一个激发的 AFTER 触发器。 在第一个和最后一个触发器之间激发的 AFTER 触发器将按未定义的顺序执行。

语法

sp_settriggerorder [ @triggername = ] '[ triggerschema. ] triggername'
, [ @order = ] 'value'
, [ @stmttype = ] 'statement_type'
[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]
 
参数

 
 
 

[ @triggername= ] '[ triggerschema.] triggername
要设置或更改其顺序的触发器的名称及其所属的架构(如果适用)。 [triggerschema。]triggername 是 sysname。 如果名称与触发器不对应,或者名称与 INSTEAD OF 触发器对应,则该过程将返回错误。 triggerschema 不能指定 DDL 或登录触发器。

[ @order= ] 'value'
触发器的新顺序的设置。  是 varchar(10) 而且它可以是以下值之一。

 重要事项

第一个 和 最后一个 触发器必须是两个不同的触发器。

“值” Description
first 触发器被第一个触发。
last 触发器被最后一个触发。
none 触发器以未定义的顺序触发。

[ @stmttype= ] statement_type
指定触发触发器的 SQL 语句。 statement_type 是 varchar(50) 和可以插入、 更新、 删除、 登录,或任何 Transact-SQL 中列出的语句事件 DDL 事件。 不能指定事件组。

触发器可以指定为 第一个 或 最后一个 语句类型仅后该触发器已被定义为该语句类型的触发器的触发器。 例如,触发 TR1 可以指定 第一个 表插入T1 如果 TR1 定义为 INSERT 触发器。 数据库引擎 如果返回错误 TR1, ,其中已被定义为 INSERT 触发器,仅被设置为 第一个, ,或 最后一个, ,UPDATE 语句的触发器。 有关详细信息,请参见“备注”部分。

@namespace= { 'DATABASE' | SERVER |NULL}
当 triggername 是 DDL 触发器, @namespace 指定是否 triggername 创建与数据库作用域或服务器范围。 如果 triggername 是登录触发器,必须指定服务器。 有关 DDL 触发器作用域的详细信息,请参阅 DDL 触发器。 如果未指定,或指定 NULL,则 triggername 是 DML 触发器。

 
 

0 (成功) 和 1 (失败)

注释

 
 
 

可能只有一个 第一个 和一个 最后一个 为单个表上每个语句的触发器。

如果 第一个 表、 数据库或服务器上已经定义了触发器,不能指定为新触发器 第一个 为相同的表、 数据库或服务器相同 statement_type。 此限制也适用 最后一个 触发器。

复制将为包含在立即更新订阅或排队更新订阅中的任意表自动生成第一个触发器。 复制要求其触发器为第一个触发器。 在尝试将带有第一个触发器的表包含在立即更新订阅或排队更新订阅中时,复制将引发错误。 如果在表已经包含在订阅中之后尝试使某个触发器成为第一个触发器,sp_settriggerorder 将返回错误。 如果在复制触发器上使用 ALTER TRIGGER 或者使用 sp_settriggerorder 若要更改复制触发器绑定到 最后一个或 无 触发器,订阅将无法正常运行。

如果与数据库作用域的 DDL 触发器和 DDL 触发器具有服务器作用域存在对同一事件,你可以指定这两个触发器是 第一个 触发器或 最后一个 触发器。 但是,服务器作用域的触发器始终最先触发。 一般情况下,同一事件中 DDL 触发器的执行顺序如下:

  1. 服务器级触发器标记 第一个。

  2. 其他服务器级触发器。

  3. 服务器级触发器标记 最后一个。

  4. 数据库级别触发器标记 第一个。

  5. 其他数据库级触发器。

  6. 数据库级别触发器标记 最后一个。

如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器, 第一个 或 最后一个 最初在触发器上设置的属性已删除,并且值将由替换 无。 必须通过使用重置顺序值 sp_settriggerorder。

如果同一个触发器必须指定为多个语句类型,第一个或最后一个顺序 sp_settriggerorder 必须为每个语句类型执行。 此外,该触发器之前,必须首先定义语句类型可以将指定为 第一个 或 最后一个 触发器来激发该语句类型。

 

若要设置具有服务器作用域(使用 ON ALL SERVER 创建)的 DDL 触发器或登录触发器的顺序,需要具有 CONTROL SERVER 权限。

若要设置具有数据库作用域(使用 ON DATABASE 创建)的 DDL 触发器的顺序,需要具有 ALTER ANY DATABASE DDL TRIGGER 权限。

若要设置 DML 触发器的顺序,需要对要在其中定义该触发器的表或视图具有 ALTER 权限。

示例

  

A. 设置 DML 触发器的触发顺序

以下示例指定触发器 uSalesOrderHeader 是对 UPDATE 表执行 Sales.SalesOrderHeader 操作后触发的第一个触发器。

USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'Sales.uSalesOrderHeader', @order='First', @stmttype = 'UPDATE';

 
 

B. 设置 DDL 触发器的触发顺序

以下示例指定触发器 ddlDatabaseTriggerLog 是对 AdventureWorks2012 数据库执行 ALTER_TABLE 操作后触发的第一个触发器。

 
USE AdventureWorks2012;
GO
sp_settriggerorder @triggername= 'ddlDatabaseTriggerLog', @order='First', @stmttype = 'ALTER_TABLE', @namespace = 'DATABASE';
 

系统存储过程 (Transact SQL )
数据库引擎存储过程 (Transact SQL )
ALTER TRIGGER (Transact SQL )

sp_settriggerorder 设置触发器执行顺序的更多相关文章

  1. [转]Oracle Form 触发器执行顺序

    Trigger 不是数据库中的触发器,不过功能类似,都是当某个事件发生的时候会触发. Trigger中可以编写代码,当对应事件发生的时候就会执行该Trigger中的代码. Oracle Form中的T ...

  2. FORM触发器执行顺序

    触发器执行顺序: 1. 当打开FORM时: (1) PRE-FORM (2) PRE-BLOCK(BLOCK级) (3) WHEN-NEW-FORM-INSTANCE (4) WHEN-NEW-BLO ...

  3. Nginx 编译设置模块执行顺序

    Nginx编译时,配置"--add-module=xxx"可以加入模块,当我们需要按照指定顺序来设置过滤模块执行顺序时,先配置的"--add-module=xxx&quo ...

  4. oracle form 触发器执行顺序及键定义[Z]

    1当打开FORM时: (1)PRE-FORM (2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5) ...

  5. ORACLE FormBuilder触发器执行顺序

    1.当打开FORM时: (1)PRE-FORM (2)PRE-BLOCK(BLOCK级) (3)WHEN-NEW-FORM-INSTANCE (4)WHEN-NEW-BLOCK-INSTANCE (5 ...

  6. sqlserver触发器执行顺序【未经验证】

    exec sp_settriggerorder @triggername = 'tr_customer_1', @order = 'first', @stmttype = 'insert',@name ...

  7. Oracle EBS中有关Form的触发器的执行顺序

    http://blog.csdn.net/postfxj/article/details/8135769 触发器执行顺序: 1.  当打开FORM时: (1)       PRE-FORM (2)   ...

  8. 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  9. 浅谈Unity的脚本执行顺序

    一.添加脚本的顺序 这是一张官方的脚本顺序图 一般,当我们把脚本绑定在游戏对象上时,或者点击绑定好的脚本的reset按钮时,会调用Reset() 当我们初始化一个对象时,会先调用Awake()在调用O ...

随机推荐

  1. python查看及修改当前的工作路径

    在pycharm中使用jupyter的时候,有时候需要查看当前的工作路径,然后需要修改当前的路径. 获取当前工作目录 os.getcwd() #用以获取当前的工作目录 改变当前工作目录 os.chdi ...

  2. MATLAB中多个一维数组的合并

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013538664/article/details/37673711 1.一维数组直接合并      ...

  3. 使用 Composer 查看 FastAdmin 项目 组件的版本

    比如查看 ThinkPHP 的版本号. 使用命令 composer show topthink/* 显示如下,可以看到 ThinPHP 版本为 V5.0.12:

  4. pyquery的使用

    常用的三种初始化方法: 1.字符串初始化: from pyquery import PyQuery as pq html=""" <html> <hea ...

  5. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  6. mysql的变量信息详解

    mysql的变量详解 执行show variables命令可以查看MySQL服务器的变量 变量名 默认值 说明 对应的配置文件参数 auto_increment_increment 1 自增长类型的初 ...

  7. Eclipse提交代码到Spark集群上运行

    Spark集群master节点:      192.168.168.200 Eclipse运行windows主机: 192.168.168.100 场景: 为了测试在Eclipse上开发的代码在Spa ...

  8. java架构师之路--推荐书籍

    1.大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选 ...

  9. Block Design 小技巧之添加RTL代码到block_design

    Block Design 小技巧之添加RTL代码到block_design 1.首先得打开Block Design,右击RTL文件,才会出现Add module to Block Design选项. ...

  10. 学习使用NotePad++

    参考使用Notepad的快捷键: http://www.cnblogs.com/jungege/p/6003992.html ================================== 实用 ...