【SQL SERVER】启用禁用触发器

本文详细介绍了如何在SQLServer中使用ENABLE|DISABLE语句和ALTER TRIGGER语句来禁用和启用触发器。内容包括DML触发器及DDL触发器的禁用和启用示例,以及在不同作用域级别的操作。此外,还提到了启用或禁用触发器所需的权限。

SQL Server触发器的禁用和启用

1)ENABLE | DISABLE语句

语法(sql server 2008以上)

1

2

{ENABLE | DISABLE} TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL 

ON { object_name | DATABASE ALL SERVER } [ ; ] 

schema_name:触发器所属架构的名称。schema_name不能指定DDL或登录触发器。

trigger_name:要启用或禁用的触发器的名称。

ALL:指示启用在ON子句作用域中定义的所有触发器。(SQL Server在为合并复制发布的数据库中创建触发器。在已发布数据库中指定ALL可禁用这些触发器,这样会中断复制。在指定ALL之前,请验证没有为合并复制发布当前数据库。)

object_name:是的名称的表或试图在其触发DML trigger_name已创建以执行。

DATABASE:DDL触发器,该值指示trigger_name已创建或修改与数据库作用域执行。

ALL SERVER:DDL触发器,该值指示trigger_name已创建或修改要执行与服务器作用域。ALL SERVER也适用于登录触发器。

示例

A.在表中启用或禁用DML触发器

禁用在表uAddress中创建的触发器Address,然后再启用它。

1

2

3

4

disable trigger person.uAddress on Person.Address;

go

enable trigger Person.uAddress on Person.Address;

go

B.启用或禁用DDL触发器

在数据库范围,禁用DDL触发器safety,然后再启用它。

1

2

3

4

disable trigger safety on database;

go

enable trigger safety on database;

go

C.启用或禁用以同一作用域定义的所有触发器

启用或禁用在服务器作用域级别创建的所有的DDL触发器。

1

2

3

4

enable trigger all on all server;

go

disable trigger all on all server;

go

2)ALTER TRIGGER语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

--禁用

alter table tablename disable trigger triggername;

--启用

alter table tablename enable trigger triggername;

go

--禁用某张表上的所有触发器

alter table tablename disable trigger all;

go

--启用某张表上的所有触发器

alter table tablename enable trigger all;

--禁用所有表上的所有触发器

exec sp_msforeachtable 'alter table ? disable trigger all'

--启用所有表上的所有触发器

exec sp_msforeachtable 'alter table ? enable trigger all'

 

Permissions

若要启用或禁用DML 触发器,用户必须至少对于创建触发器所在的表或视图拥有 ALTER 权限。

若要启用或禁用具有服务器作用域 (ON ALL SERVER) 的 DDL 触发器或登录触发器,用户必须对服务器具有 CONTROL SERVER 权限。 若要启用具有数据库范围 (ON DATABASE) 的 DDL 触发器,用户至少应在当前数据库中拥有 ALTER ANY DATABASE DDL TRIGGER 权限。

转自: 

SQL Server触发器的禁用和启用 - 会飞的金鱼 - 博客园

### 启用 SQL Server 触发器日志记录的方法 在 SQL Server 中,触发器的执行本身不会自动记录到日志中,但可以通过启用数据库级别的日志记录功能来捕获触发器的活动。SQL Server 提供了多种机制来实现这一目标,包括 SQL Server 日志、SQL Server Profiler 以及扩展事件(Extended Events)等。 #### 使用 SQL Server 日志记录触发器活动 SQL Server 的事务日志会自动记录所有对数据库的更改,包括由触发器引发的更改。可以通过查询 `fn_dblog` 函数来查看事务日志中的信息。此方法适用于分析触发器执行过程中对数据的更改。 ```sql SELECT [Current LSN], [Operation], [Context], [Transaction ID], [SPID], [Description], [Begin Time], [End Time], [Transaction Name] FROM fn_dblog(NULL, NULL) WHERE [Transaction Name] = 'TRG_TM_Room_Change_GetMaxChangeID'; ``` 该查询将返回与指定触发器相关的所有事务日志条目。需要注意的是,`fn_dblog` 是一个未公开的函数,使用时应谨慎[^1]。 #### 使用 SQL Server Profiler 记录触发器活动 SQL Server Profiler 是一个图形化工具,可以用来捕获和分析 SQL Server 实例上的事件。通过创建跟踪(Trace),可以捕获触发器的执行情况。 1. 打开 SQL Server Profiler。 2. 创建一个新的跟踪,并连接到目标 SQL Server 实例。 3. 在“事件选择”选项卡中,选择“存储过程”和“TSQL”事件类别。 4. 筛选事件,输入触发器名称作为过滤条件。 5. 启动跟踪并执行触发器相关的操作。 6. 停止跟踪后,可以查看触发器的执行细节。 这种方法适用于调试和性能分析,但不建议在生产环境中长期启用。 #### 使用扩展事件记录触发器活动 扩展事件(Extended Events)是 SQL Server 提供的一种轻量级性能监控工具,可以用来捕获更详细的事件信息,包括触发器的执行。 1. 打开 SQL Server Management Studio (SSMS)。 2. 展开“管理”节点,右键点击“扩展事件”,选择“新建会话”。 3. 在“新建扩展事件 会话”窗口中,选择“事件”选项卡。 4. 添加 `sqlserver.trigger_start` 和 `sqlserver.trigger_end` 事件。 5. 配置事件筛选器,输入触发器名称作为条件。 6. 启动会话并执行触发器相关的操作。 7. 查看事件数据,分析触发器的执行情况。 扩展事件的性能开销较小,适合在生产环境中使用[^1]。 #### 禁用启用触发器 如果需要暂时停止触发器的执行,可以使用 `DISABLE TRIGGER` 命令。当需要重新启用时,使用 `ENABLE TRIGGER` 命令。 ```sql -- 禁用触发器 DISABLE TRIGGER TRG_TM_Room_Change_GetMaxChangeID ON YourTableName; -- 启用触发器 ENABLE TRIGGER TRG_TM_Room_Change_GetMaxChangeID ON YourTableName; ``` 这种方法可以避免删除触发器的风险,确保在需要时能够快速恢复触发器的功能[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值