MSSQL触发器
1.触发器语法
CREATE TRIGGER<trigger name>
ON [<模式名>.]<表名或视图名>
[WITH ENCRYPTION]
{{{FOR|AFTER} <[DELETE] [,] [INSERT] [,] [UPDATE] >} | INSTED OF}
[WITH APPEND]
AS
<SQL语句>
2.DML触发器类型
参考:msdn
1)AFTER 触发器:在执行 INSERT、UPDATE、MERGE 或 DELETE 语句的操作之后执行 AFTER 触发器。 如果违反了约束,则永远不会执行 AFTER 触发器;
2)INSTEAD OF 触发器:插入、更新或删除行之前执行;
比较:
| 
 功能  | 
 AFTER触发器  | 
 INSTEAD OF触发器  | 
| 
 适用范围  | 
 表  | 
 表和视图  | 
| 
 每个表或视图包含触发器的数量  | 
 每个触发操作(UPDATE、DELETE 和 INSERT)包含多个触发器  | 
 每个触发操作(UPDATE、DELETE 和 INSERT)包含一个触发器  | 
| 
 级联引用  | 
 无任何限制条件  | 
 不允许在作为级联引用完整性约束目标的表上使用 INSTEAD OF UPDATE 和 DELETE 触发器。  | 
| 
 执行  | 
 晚于: 约束处理 声明性引用操作 创建插入的和删除的表 触发操作 
  | 
 早于: 约束处理 替代: 触发操作 晚于: 创建插入的和删除的表  | 
| 
 执行顺序  | 
 可指定第一个和最后一个执行  | 
 不适用  | 
| 
 插入的和删除的表中的varchar(max)、nvarchar(max) 和 varbinary(max)列引用。  | 
 允许  | 
 允许  | 
| 
 插入的和删除的表中的 text、ntext 和 image 列引用。  | 
 不允许  | 
 允许  | 
3.插入表(instered表)和删除表(deleted表)
| 
 对表的操作  | 
 Inserted逻辑表  | 
 Deleted逻辑表  | 
| 
 增加记录(insert)  | 
 存放增加的记录  | 
 无  | 
| 
 删除记录(delete)  | 
 无  | 
 存放被删除的记录  | 
| 
 修改记录(update)  | 
 存放更新后的记录  | 
 存放更新前的记录  | 
4.IF UPDATE()与COLUMNS_UPDATED()
前一个用于判断是否更新了某列提供一个布尔判断;后一个提供以此检查多列能力。
5.禁用启用触发器
ALTER TABLE <table name> <ENABLE|DISABLE> TRIGGER <ALL|trigger name>
                    
                
                
            
        
浙公网安备 33010602011771号