SQL 触发器
触发器,是对表进行插入,更新、删除操作时自动执行的存储过程。
通常用于强制业务规则,高级约束、可执行 if/while/case
触发器定义在特定的表上,与表相关。
自动触发执行,不能直接调用。
是一个事务,可回滚,不能手动提交。
delete 触发器 当删除表中记录时触发,自动执行触发器定义的SQL语句
insert 触发器 当请表中插入数据时触发,自动执行触发器锁定义的SQL语句
update触发器 当更新表中列,多列时触发,自动执行触发器所定义的SQL语句
触发器触发时
系统自动在内存创建deleted 表 或者 inserted表;
只读,不允许修改;触发器执行完成后,自动删除;
inserted:用于存储insert 和 update 语句所影响的行的副本。
1.再执行insert或update语句时,新加行被同时添加到inserted表和触发器表中,所以inserted表临时保存了插入或者更新后的记录行。
2.可以从inserted中检查插入的数据是否满足业务需求,如果不满足,则箱用户报告错误消息,并回滚插入操作。
deleted表:表用于存储delete 和 update语句所影响的行的副本
1.再执行delete或update语句时,执行触发器表中删除,并传输到deleted表中,所以deleted保存了删除或者更新前的记录行。
2.可以冲deleted表检查被删除的数据是否满足业务需求,如果不满足,则箱用户报告错误消息,并回滚插入操作。
语法:
create trigger [trigger_Name] on [table_name] for [delete|insert|update] as t-sql语句 go
--------------------------------
update触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据。
使用update(列)函数检测是否修改了某列。
列:
Create trigger trig_update_transInfo on transInfo --表名 for update --更新,修改 as if update(transDate) --检查是否修改了交易日期列 transDate begin print '交易失败' end GO
修改字段时,弹出异常提示,执行数据回滚
CREATE TRIGGER trigger_temp3 ON dbo.temp1 --表名 FOR UPDATE --更新 AS IF UPDATE(BillAutoID) --修改的字段 BEGIN RAISERROR('日期被修改',2,1); --弹出异常日志提示 ROLLBACK TRANSACTION --事务回滚 END go
---