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

 

 

 

 

---

posted @ 2019-06-26 15:55  蓝雨冰城  阅读(275)  评论(0编辑  收藏  举报