访问已删除对象的组件

时间:2018-06-29 04:37:29

标签: sql-server tsql database-trigger

我有一个触发器,将从表A删除/更新的记录插入表B。这是通过使用sql server中的已删除对象来实现的。 我的问题是。有没有一种方法可以确定在表A中执行的操作是使用SQL Server中的已删除对象进行的更新还是删除

1 个答案:

答案 0 :(得分:0)

这是一个例子...

drop table if exists dbo.temp;
drop table if exists dbo.log;
go

create table dbo.temp(Id int, Value varchar(100));
insert dbo.temp values (1, '1'), (2, '2'), (3, '3');
go

create table dbo.log(Id int, Operation char(1));
go

create trigger trigger_temp
    on dbo.temp
    for update, delete
as begin

    insert dbo.Log
    select  i.Id , 'U'
    from    inserted i
    inner join deleted d
            on d.Id = i.Id;

    insert dbo.Log
    select  d.Id, 'D'
    from    deleted  d
    left outer join inserted i
            on i.Id = d.Id
    where   i.Id is null

end;
go

insert dbo.temp values (4, '4');
update dbo.temp set Value = '-1' where Id = 1;
delete dbo.temp where id = 2;
select * from dbo.Log
go