SQL Server—触发器

作者 : 攻城狮 发布时间: 2023-03-20 共350人阅读

1、触发器的定义:可以理解为因为发生了某一件事情,而自动的发生了下一件事情。

2、触发器的分类

(1)“instead of”触发器:在执行操作之前被执行。–事前触发器

(2)“after”触发器:在执行操作之后被执行。 –事后触发器

/*
instead:替代/而不是…/代替/反而
instead of:而不是
*/

举例:假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到,则自动添加部门信息,部门名称为”新部门”。

create trigger tri_InsertPeople on People after insert
as
    if not exists(select * from Department where DepartmentId = (select DepartmentId from inserted))
    begin
        insert into Department(DepartmentId,DepartmentName)
        values((select DepartmentId from inserted),'新部门')
    end
go

/*
trigger:引发 / 开动 / 触发
tri_InsertPeople是触发器的名字
*/

举例:创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。

 

create trigger tri_DeleteDept on Department instead of delete
as
    if not exists(select * from People where DepartmentId = (select DepartmentId from deleted))
    delete from Department where DepartmentId = (select DepartmentId from deleted)
go

举例:触发器实现,删除一个部门的时候将部门下所有员工全部删除。

 

create trigger tri_DeleteDept on Department after delete
as
    delete from People where DepartmentId = (select DepartmentId from deleted)
go

举例:修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改

 

create trigger tri_UpdateDept on Department after update
as
    update People set DepartmentId = (select DepartmentId from inserted)
    where DepartmentId = (select DepartmentId from deleted)
go

注意:在项目中不要过多的使用触发器,触发器的使用需要谨慎再谨慎!!

如果有多个表之间存在触发器,删除一个表内的数据,有可能会删除其他表的数据(但这个表的数据是你并不想删除的)。

1.本站所有资源收集于互联网和用户上传,如有侵权请联系客服删除;
2.本站不保证所提供下载资源的准确性、安全性和完整性,请自行测试;
3.资源仅供学习交流使用,版权归原作者所有,请在下载后24小时之内删除;
4.如用于商业或非法用途实属个人行为,与本站无关,一切后果由用户自负;
5.本站提供的源码、主题模板、插件等资源,都不包含技术服务,请大家谅解;
6.本站所设置的资源售价只是用于赞助,收取费用仅维持本站的日常运营所需;
7.如果您有好的源码或者教程,请至个人中心发布资源,将有积分奖励和额外收入;
8.本站默认解压密码:www.ittiantang.com,如有链接无法下载,请联系管理员处理。

IT天堂 » SQL Server—触发器

常见问题FAQ

IT天堂的会员权益只能通过充值获得吗?
您可以通过签到功能获得积分,用积分兑换会员权益。
网站上的VIP资源只能通过充值购买吗?
您可以通过每日签到获得积分,使用积分直接购买VIP资源。

发表评论