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
超级会员免费看
订阅专栏 解锁全文
647

被折叠的 条评论
为什么被折叠?



