欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在Sql Server触发器中判断操作是Insert还是Update还是Delete

程序员文章站 2022-06-13 11:45:25
在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表有数据(旧数据)