在Sql Server触发器中判断操作是Insert还是Update还是Delete
程序员文章站
2023-11-09 16:17:16
在sql server触发器中判断操作是insert还是update还是delete
declare
@isinsert bit,
@isupdate...
在sql server触发器中判断操作是insert还是update还是delete
declare @isinsert bit, @isupdate bit, @isdelete bit if exists(select 1 from inserted) and not exists(select 1 from deleted) set @isinsert = 1 else set @isinsert = 0 if exists(select 1 from inserted) and exists(select 1 from deleted) set @isupdate = 1 else set @isupdate = 0 if not exists(select 1 from inserted) and exists(select 1 from deleted) set @isdelete = 1 else set @isdelete = 0 create trigger update_del on table for update,delete as if not exists(select 1 from inserted) begin /*inserted表无记录,是删除*/ end else begin /*是更新*/ end go
关键在于inserted表
触发器语句中使用了两种特殊的表:deleted
表和 inserted 表。
deleted
表用于存储 delete 和 update 语句所影响的行的复本。在执行 delete 或 update 语句时,行从触发器表中删除,并传输到 deleted
表中。deleted 表和触发器表通常没有相同的行。
inserted
表用于存储 insert 和 update 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted
表和触发器表中。inserted 表中的行是触发器表中新行的副本。
1.插入操作(insert)
inserted表有数据,deleted表无数据
2.删除操作(delete)
inserted表无数据,deleted表有数据
3.更新操作(update)
inserted表有数据(新数据),deleted表有数据(旧数据)