首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Sybase >

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

2012-02-22 
怎样在触发器中区分Update,insert,delete动作?由于update是一个delete和insert的组合,不知道怎么才能区分

怎样在触发器中区分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等操作!
[解决办法]
把触发器分开写就什么都实现了嘛。
[解决办法]
分开写!就着样

热点排行