触发器详解
发表日期:2022-10-19 11:20:47 | 来源: | | 浏览(1319) 分类:SQLServer
知识点:触发器里有两张内置表,inserted 表和deleted 表
deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
1.插入操作(Insert)
inserted 表有数据,deleted 表无数据
2.删除操作(Delete)
inserted 表无数据,deleted 表有数据
3.更新操作(Update)
inserted 表有数据(新数据),deleted 表有数据(旧数据)
例子:
我们有一张House表,有个日期格式字段:modify_microtime datetime ,我们希望当House表有新增或修改数据的时候触发更新这个字段为最新的时间。
创建触发器:
create TRIGGER [dbo].[trigger_House(触发器的名字)] ON [dbo].[House(监听的表名)] AFTER INSERT, UPDATE -- 插入/修改后触发 ,delete 删除后触发 AS BEGIN SET NOCOUNT ON; -- 你的业务逻辑 update House set modify_microtime = getdate() where HID in (select HID from inserted); -- 注意这句非常重要 where HID in (select HID from inserted) 查找更新的记录行 -- 如果House表一次更新的是多行,那么触发的inserted 表也是多行,所以这里用了where in 而不是 = END
修改触发器:
只需要把创建语句的create 改为 alter 即可
删除触发器:
drop trigger 触发器名字