create trigger trig_user_update
on tab_users
for update
NOT FOR REPLICATION   
as
begin   
  SET NOCOUNT ON
  if update(user_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 
        where a.user_id in (select user_id from inserted where user_stat <> 0) 
    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 
        where a.user_id in (select user_id from inserted where user_stat = 0) 
  end
  SET NOCOUNT OFF
end

解决方案 »

  1.   


    CREATE OR REPLACE TRIGGER TRIG_USER_UPDATE
      BEFORE UPDATE OF USER_STAT ON TAB_USERS  
    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
         WHERE A.USER_ID IN (SELECT USER_ID FROM INSERTED WHERE USER_STAT <> 0);
      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
         WHERE A.USER_ID IN (SELECT USER_ID FROM INSERTED WHERE USER_STAT = 0);
    END;
    /
      

  2.   

    NOT FOR REPLICATION  
    转化成什么啦?