你用什么数据库
好象不用sql语名现实,想想别的办法吧

解决方案 »

  1.   

    你要怎样更新?
    你的table2是不是数据要求总是与table1相同?
      

  2.   

    1、不能用触发器吗?
    2、有些大型数据库可以支持“出版”,你的不可以吗?
    3、视图肯定最好,为什么不用视图?
    4、--删除多余
         DELETE FROM TABLE2 WHERE pri-key NOT IN (SELECT pri-key FROM TABLE1)
       --更新不同
         UPDATE TABLE2 
         SET    pri-key = TABLE1.pri-key ,
                data1   = TABLE1.data1 ,
                data2   = TABLE2.data2
         from   TABLE2 JOIN TABLE1 ON TABLE2.pri-key = TABLE1.pri-key 
         WHERE  TABLE2.data1 <> TABLE1.data1
         OR     TABLE2.data2 <> TABLE1.data2
       --插入没有的
         INSERT INTO TABLE2(pri-key , data1 , data2) 
                     SELECT pri-key , data1 , data2 
                     FROM TABLE1 
                     WHERE pri-key NOT IN (SELECT pri-key  FROM TABLE2)
    5、以上代码还有其它变体,比如子查询变成联接,插入写为游标拼“values(...)”等等,但我还是推荐你重新设计一下这个数据库,出现这种程度的冗余数据有必要吗? 
      

  3.   

    update table2 
     set (data1,data2)=(dselect data1,data2
           from table1 where pri-key =table2.pri-key);
    不行吗?
         
      

  4.   

    update table2 
    set (data1,data2)=(select data1,data2
          from table1 where pri-key =table2.pri-key);
    不行吗?
      

  5.   

    to ccat(阿猫)
    第4点不敢苟同 数据量大的话 not in 的效率太低.
    to yfd
    为什么要这样做,避免锁住?
      

  6.   

    用触发器我觉得效果会更好,分别在insert,update和delete中确定。我同意阿猫的5重新设计数据库。
      

  7.   

    上面的方法似乎只能在SQL SERVER中,但如果一个是本地数据库,一个是远程数据库怎么办,我也碰到过这种情况,我使用了一个附加表存储更新号,如果更新号不变则不做更改,否则只好删除再全ADDNEW了,我想这样的话应该和那些复杂的SQL语句效率差不多吧!
      

  8.   

    反正有主键,不用not in 也可以扔的是办法,我只是写个大概。不过还是视图好。
      

  9.   

    ccat(阿猫)说的好。使用出版功能。