create TRIGGER trig_dev
ON TAB_GPSDEV
FOR INSERT,update,delete
NOT FOR REPLICATION   
AS
  BEGIN      
    set NOCOUNT ON
    begin         
      insert into tab_user_dev (user_id,dev_id,chg_action) 
        select a.user_id,a.dev_id,0 from 
          (select c.user_id,d.dev_id from tab_user_cargroup c 
            inner join deleted d on c.group_id = d.group_id
            inner join tab_users u1 on c.user_id = u1.user_id
            where u1.user_stat = 0) a
          left outer join
          (select c.user_id,i.dev_id from tab_user_cargroup c 
            INNER JOIN inserted i on c.group_id = i.group_id
            inner join tab_users u1 on c.user_id = u1.user_id
            where u1.user_stat = 0) b
          on a.user_id = b.user_id and a.dev_id = b.dev_id where isnull(b.user_id,-1)=-1  
    end
    begin
      insert into tab_user_dev (user_id,dev_id,chg_action) 
        select a.user_id,a.dev_id,1 from 
          (select c.user_id,i.dev_id from tab_user_cargroup c 
            inner join inserted i on c.group_id = i.group_id
            inner join tab_users u1 on c.user_id = u1.user_id
            where u1.user_stat = 0) a
          left outer join
          (select c.user_id,d.dev_id from tab_user_cargroup c 
            INNER JOIN deleted d on c.group_id = d.group_id
            inner join tab_users u1 on c.user_id = u1.user_id
            where u1.user_stat = 0) b
          on a.user_id = b.user_id and a.dev_id = b.dev_id where isnull(b.user_id,-1)=-1  
    end 
    if update(device_stat)
    begin
      insert into tab_user_dev (user_id,dev_id,chg_action)
        select a.user_id,c.dev_id,0 from tab_users a
          inner join tab_user_cargroup b on a.user_id = b.user_id
          inner join tab_gpsdev c on c.group_id = b.group_id
          inner join tab_users u1 on a.user_id = u1.user_id
          where u1.user_stat = 0 and 
          c.dev_id in (select dev_id from inserted where device_stat = 1) 
    end  
    if update(device_stat)
    begin
      insert into tab_user_dev (user_id,dev_id,chg_action)
        select a.user_id,c.dev_id,1 from tab_users a
          inner join tab_user_cargroup b on a.user_id = b.user_id
          inner join tab_gpsdev c on c.group_id = b.group_id
          inner join tab_users u1 on a.user_id = u1.user_id
          where u1.user_stat = 0 and 
          c.dev_id in (select dev_id from inserted where device_stat = 0) 
    end
    SET NOCOUNT OFF
  END