SQL Server触发器

一、触发器特点

1、触发器是不需要用户直接调用的特殊存储过程,当对表进行插入、删除、修改时,操作自动执行。

2、触发器可以用来实施复杂的完整性约束,以防止对数据的错误修改。

主键——主体完整性;外键——参照完整性;属性范围——用户定义完整性

3、触发器不允许带参数,也不允许被调用。

4、触发器不反悔任何结果。

二、触发器类

DELETE触发器、INSERT触发器、UPDATE触发器

三、触发器工作原理

触发器触发时,系统自动在内存中创建只读的deleted表或inserted表,触发器完成后自动删除。 

inserted表:

  • 临时保存插入或更新后的记录行;
  • 可从inserted表中检查插入的数据是否满足需求;
  • 不满足,则向用户报告错误,回滚插入操作。

deleted表: 

  • 临时保存删除或更新前的记录行;
  • 可从deleted表检查被删除的数据是否满足业务需求;
  • 不满足,则向用户报告错误消息,回滚插入操作。

四、触发方式

五、触发器格式

 

六、示例

CREATE TRIGGER tr_stu on t_student FOR after UPDATE 

AS print @rowcount 


CREATE TRIGGER tr_stu on t_student FOR after INSERT,UPDATE

AS RAISERROR(4008,16,10)


CREATE TRIGGER tr_check_sc ON t_sc FOR after INSERT 

AS 

    update t_sc set grade=null where sno = (select sno from inserted) and cno=(select cno from inserted)


CREATE TRIGGER tr_dept ON t_student FOR after INSERT,UPDATE 

AS 

     update t_student set dept='计算机系' where sno = (select sno from inserted where dept is null)


CREATE TRIGGER tr_ex ON t_student FOR after update 

AS

  update t_sc set sno=(select sno from inserted) where sno=(select sno from deleted)


CREATE TRIGGER tr_ex ON t_sc FOR after INSERT 

AS

    delete from t_sc where sno = (select sno from inserted where sno not in (select sno from t_student)) or cno = (select cno from inserted where cno not in (select cno from t_course))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值