写一个触发器不就可以解决了吗? 不难的,数据结构LZ自己最清楚,触发器就由 LZ 自己写吧

解决方案 »

  1.   

                    A表        
    F_PID               F_PORT                 F_ROLE            
    169.169.0.19         1234                  1;2;3          
    172.0.0.1            5000                    5 
    192.109.0.30         10000                  All 

                    B表 
    F_PID               F_DATA                  F_TW 
    1                   aaaaaaaa                 1 
    2                   bbbbbbbb                 5 
    3                   cccccccc                 3 

                    C表 
    F_PID              F_PORT            F_PID            F_DATA             F_TW 
    169.169.0.19        1234              1               aaaaaaaa             1 
    192.109.0.30        10000             3               aaaaaaaa             1 
    172.0.0.1           5000              2               bbbbbbbb             5 
    192.109.0.30        10000             3               bbbbbbbb             5 
    169.169.0.19         1234             1               cccccccc             3 
    192.109.0.30        10000             3               cccccccc             3 

    每当B表中有一条数据插入,就根据B.F_TW  查询A表中的 A.F_ROLE ,如果 A.F_ROLE='All' 那就把A表和B表的数据插入到C表中,如果 A.F_ROLE='1;2;3'  那就看A.F_ROLE 中是否有B.F_TW  ,有的话就把A表和B表的数据插入到C表中,反之则不。 
      

  2.   

    因为刚才格式没有处理好,又整理了一下!不知道怎么写这个SQL语句,请达人给看看 ,有没有解????
      

  3.   

    我已经写了触发器, 但是那个SQL语句不对!不知道怎么去处理 B.F_TW   和 A.F_ROLE 的关系
      

  4.   

    --> 触发器里用这句:
    insert into C表 select a.F_PID,a.F_PORT,b.F_PID,b.F_DATA,b.F_TW from A表 a join INSERTED b on charindex(';'+ltrim(b.F_TW)+';',';'+a.F_ROLE)+';')>0
      

  5.   

    因为 A.F_ROLE的内容是由(数字和分号)或者 All组合起来的 ,所以在 判断B.F_TW和A.F_ROLE的关系时,没想到好的方法!
      

  6.   

    to  Limpire   先谢谢了
    第 1 行: ')' 附近有语法错误。
      

  7.   

    --try,隨手寫的,沒測試create trigger tri_B_insert  on B
    for insert
    AS
    begin   insert into C
       select A.F_PID, A.F_Port, X.F_Pid, X.F_Data,X.F_TW
       from A inner join inserted X
       on  A.F_Role='All'
         or  charindex(';'+rtrim(X.F_Tw)+';' , ';'+rtrim(A.F_role)+';')>0end
      

  8.   

    --> ';'+a.F_ROLE)+';' 这里多了个括号:insert into C表 select a.F_PID,a.F_PORT,b.F_PID,b.F_DATA,b.F_TW from A表 a join INSERTED b on charindex(';'+ltrim(b.F_TW)+';',';'+a.F_ROLE+';')>0
      

  9.   

    insert into c (select  a.F_PID,a.F_PORT,b.F_PID,b.F_DATA,b.F_TW  from A left join B on (B.F_TW like +'%;'+A.F_ROLE+';%') OR A.F_ROLE='ALL' ) 
      

  10.   

    insert into c (select a.F_PID,a.F_PORT,b.F_PID,b.F_DATA,b.F_TW from A left join B on (';'+B.F_TW+';' like +';'+A.F_ROLE+';') OR A.F_ROLE='ALL' ) 
      

  11.   

    谢谢 Limpire及其各位,解决了,给分.