有2个表:A源表,B目标表。
假设两个表都有一个相同保证列为id,其它列可以不同。怎样同步可以使B表的行与A表的行相同(只关注id列)。表A                               表B
id     name                       id         Age
------                     ---------
1      a                          1          41
2      bbb                        2          22
3      fff                        3          40
5      dff                        5          23
求最有算法

解决方案 »

  1.   

    具体说,两个表都用来保存人员信息,都以id为主键。A表只有id和name列,B表有id、Age等其它列。算法的任务是在A表行变化时(如增删),用A表更新B表,以保证两表的id一一对应,有相同列时,也要更新相同列。这里想讨论的是更新的算法:
    我的算法如下,总觉得效率不高:
    1 读出B表所有id,放入列表listB中
    2 用A表记录逐条检查listB中是否存在,如果存在用A表的记录Update B表相应的记录,如果不存在则将A表的相应的列insert into  B表,
    3 删除listB中刚检查过的id
    4 最后listB剩余的id表示B表中多余的记录,删除B表中的多余的记录。
      

  2.   

    这样试试看:DECLARE
     CNT NUMBER(1):=0;
    BEGIN --删除B表中多余的数据
     DELTE FROM B WHERE NOT EXISTS(SELECT 0 FROM A WHERE A.ID=B.ID);
     COMMIT; SELECT COUNT(*) INTO CNT FROM USER_TAB_COLUMNS WHERE TABLE_NAME='B' AND COLUMN_NAME='NAME';
     IF CNT=1 THEN
      --B表有 name 字段 UPDATE B SET NAME=(SELECT A.NAME FROM A WHERE A.ID=B.ID) WHERE EXISTS(SELECT 0 FROM A WHERE A.ID=B.ID);
    COMMIT; INSERT INTO B(ID,NAME) SELECT ID,NAME FROM A WHERE NOT EXISTS(SELECT 0 FROM B WHERE A.ID=B.ID);
    COMMIT; ELSE
      --B表没有 name 字段  --只有添加数据的操作
    INSERT INTO B(ID) SELECT ID FROM A WHERE NOT EXISTS(SELECT 0 FROM B WHERE A.ID=B.ID);
    COMMIT;
     END IF;
    END;
    /
    由于你不确定B 的结构,所以需要先判断
      

  3.   

    非常感谢boydgmx,再问一个问题结贴:还有两个表要同步,B是oracle表、A是MS SQLServer表,自A向B同步。何法好。