照例先讲场景:算法组把他们算出来的风险评分插入到算法对应的表格(外键+分数+若干其他字段),在他们插入或修改分数的时候,需要把对应的分数,根据外键插入到对应的业务表。
触发器就是在数据库某个表格发生增删改的操作时,被触发执行预设的SQL语句。
数据库触发器可以分为两大类:前触发器(instead of)和后触发器(after|for)。
前触发器即执行到触发的语句时,转而执行预设的sql触发语句,并不执行原来的SQL语句,相当于用触发器的SQL替换 (instead) 了本来的语句
后触发器即执行到触发的语句时,先执行本来的SQL语句,执行完之后,开始执行预设的SQL语句。即在本来的SQL之后(after)执行预设SQL。 after和for效果一样
数据库会在执行触发器的过程中创建临时表用来存储要插入的数据和要修改的数据和被删除的数据。临时表有两张(结构与创建触发器的表结构相同),Inserted 和 Deleted 表。其存储的数据如下:
触发器的基本语法
CREATE TRIGGER Trigger_Name --触发器名,在一个数据库中触发器名是唯一的。
ON Table_Name | View_Name --触发器所在的表或者视图。
AFTER(FOR)|Instead Of INSERT,DELETE,UPDATE --定义成AFTER或Instead Of类型的触发器。
--AFTER跟FOR相同,不可在视图上定义AFTER触发器
-- 后面是触发器被触发的条件,最少有一个,可以邮多个。如果有多个用逗号分开,顺序无要求。
AS --触发器要执行的操作
BEGIN
--BEGIN跟END组成一个代码块,可以写也可以不写,如果触发器中执行的SQL语句比较复杂,用BEGIN和END会让代码更加整齐,更容易理解。
END
GO --GO就代表结操作完毕
如下是测试写的触发器,当两个类型相等的时候,批量修改另一个表的数据
CREATE TRIGGER [dbo].[ZYA]
ON [dbo].[CUS_CASH_LIST]
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE CUS_CASH_FORM_THIRD SET OWNER_NAME_LAW = p.OTHER from inserted p WHERE OWNER_TYPE = p.CASH_TYPE ;
END
GO