50、SQL Server 编程对象:触发器与 SQLCLR 编程全解析

SQL Server 编程对象:触发器与 SQLCLR 编程全解析

1. SQL Server DDL 触发器特性

SQL Server 仅支持 AFTER DDL 触发器,不支持 INSTEAD OF 或 BEFORE DDL 触发器。因此,不建议使用 DDL 触发器来阻止诸如在大表上创建和重建索引这类开销较大的操作提交。因为触发器会在事件完成后、事务提交前触发,此时若执行回滚操作,会使 SQL Server 执行额外的工作来撤销该操作。

测试完成后,可运行以下代码进行清理:

USE master;
IF DB_ID(N'testdb') IS NOT NULL DROP DATABASE testdb;
2. 高效的触发器编程

触发器若使用不当,可能会引发性能问题。以下是一些高效编程的要点:
- 与 inserted 和 deleted 表交互 :这两个表的行由存储在 tempdb 中的行版本构建而成,结构与基表相同,但未建立索引。若需多次访问这些表,需格外留意。例如,定义 AFTER INSERT 触发器时,若任务需逐行处理 inserted 表中的行,应先考虑是否存在基于集合的解决方案,避免多次迭代访问 inserted 表。
- 处理行的方法 :若任务必须采用迭代解决方案,需考虑逐行处理的方法。常见的替代方案是使用基于键顺序的 TOP (1) 查询的 WHILE 循环,但在键列无索引的情况下,这种方法不如使用游标高效。因为每次执行 TOP 查询都需要对 ins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值