怎样在触发器中区分Update,insert,delete动作?

alost 2007-08-11 11:36:44
由于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


实在弄不清该怎么判断条件了,各位兄弟姐妹给解围啊!
...全文
247 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
seaskyyoyo 2008-01-21
  • 打赏
  • 举报
回复
分开写!就着样
chenczy 2007-12-25
  • 打赏
  • 举报
回复
把触发器分开写就什么都实现了嘛。
chuxue1342 2007-12-22
  • 打赏
  • 举报
回复
跟你的触发器是设置类型有关,跟你的操作没什么关系吧!就好像你在update上面定义insert和delete操作也可以一样!但是,如果你的insert,delete操作也是这个表上面,同样会触发delete等操作!
alost 2007-08-14
  • 打赏
  • 举报
回复
这样是不行的,首先是并发操作
第二个inserted /deleted的数据是不相同的,key有可能会改变,无法判断
子陌红尘 2007-08-13
  • 打赏
  • 举报
回复
同时查看inserted/deleted表,如果inserted和deleted中同时有数据,则为update操作,否则,分别为insert和delete操作。

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧