需要关联2个db的2张表,批量update,怎样才能知道哪些被更新??哪些没有被更新呢?try{ update loop},rollback.假如需要更新1000条记录,怎么样知道更已经新到哪条记录??
  例如:我做了一个批量更新的循环,要更新1000条记录,因为是批量更新,情况一:更新到第500条时,失败了,回滚;情况二:更新到第600条的时候,失败了,回滚:结果都是为更新失败,回滚,那我怎么才能知道是更新到第500条还是第600条的时候出错的呢??在此种情况(已失败回滚)下,有没有可能统计出被更改过的记录是哪些?

解决方案 »

  1.   

    两表数据关联的UPDATE表tb1及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2          1          2
             3          3          2表tb2及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20根据表tb2的id更新表tb1对应的a,b的值。update tb1 set (a,b) = (select a,b from tb2 where id = tb1.id) where id in (select distinct id from tb2)        ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20
             3          3          2
    ---------------------------------------------------------------------------------------------------------
    表tb2及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20
             3          3          2
             1         20         40
             2         20         40根据ID分组求A,B的和,然后更新表tb1update tb1 set (a,b) = (select sum(a),sum(b) from tb2 where id = tb1.id) where id in (select distinct id from tb2)        ID          A          B
    ---------- ---------- ----------
             1         30         60
             2         30         60
      

  2.   

    如果要达到楼主的要求,
    得使用循环一个一个update,在哪个出错的时候,做个标记,然后rollback.
      

  3.   

    按樓主的意思的話要寫個過程
    不過我建議樓主使用MERGE這個語法
    很有用的
      

  4.   

    udate tb1 
    set a=select tb2.a from tb1,tb2 where tb1.id=tb2.id
        b=select tb2.b from tb1,tb2 where tb1.id=tb2.id
      

  5.   

    按照楼主的意思,最好还是循环update,你如果要批量提交的话,最好用一个表保存每个记录的update 是否成功,用triger插入,在失败时,可以查询该表。