怎样在触发器中区分Update,insert,delete动作?
由于update是一个delete和insert的组合,不知道怎么才能区分
哪位高手能给个答案啊?
create trigger tr_test_insert on test
for insert,delete,update
as
declare
@rows int
select @rows=@@rowcount ---把@@rowcount记录下来,防止变化
if @@rowcount <1 return ---没有修改
if update(f1) --修改了第一个字段a1,你也可以判断其他的条件
begin
if exists(select * from deleted) and @rows> =1
begin --修改以前的值
insert into test1 select f1, user_name(), host_name(), 'old value ', getdate() from inserted
if exists(select * from inserted) and @rows> 1 --修改以后的值
select @rows
insert into test1 select f1, user_name(), host_name(), 'new value ', getdate() from inserted
end
if exists(select * from inserted) and @rows =0
begin
select @rows
insert into test1 select f1, user_name(), host_name(), 'insert ', getdate() from inserted i
end
if exists(select * from deleted) and @rows =0
begin
select @rows
insert into test1 select f1, user_name(), host_name(), 'delete ', getdate() from deleted
end
/*
insert into test1 select f1, user_name(), host_name(), 'old value ', getdate() from deleted
insert into test1 select f1, user_name(), host_name(), 'new value ', getdate() from inserted
*/
end
实在弄不清该怎么判断条件了,各位兄弟姐妹给解围啊!
[解决办法]
同时查看inserted/deleted表,如果inserted和deleted中同时有数据,则为update操作,否则,分别为insert和delete操作。
[解决办法]
跟你的触发器是设置类型有关,跟你的操作没什么关系吧!就好像你在update上面定义insert和delete操作也可以一样!但是,如果你的insert,delete操作也是这个表上面,同样会触发delete等操作!
[解决办法]
把触发器分开写就什么都实现了嘛。
[解决办法]
分开写!就着样