举个例子:
表a:
合同号
客户号表b:
合同号
货品号
数量a为主,b为从,通过‘合同号’关联,如果修改已存在记录的合同号(在主表中改),那么怎么合理地更新从表的合同号?用sql语句?我发现主表的合同号更改后,一旦进入从表,那么从表中原来的数据就全没了,因为从表中的合同号与主表的新合同号不一致了。

解决方案 »

  1.   

    要考虑到数据库的关联完整性,在主表的id号改变时就要相应的改变从表的id。这两个改变应该用到数据库中的事务原理,要么同时改变,要么都不变。代码结构为
        with database1  do
         begin
           if not intransaction  then
            //当数据库不在事务状态时才执行下面的代码
             begin
               starttransaction //开始事务
               try
                  …………
                //具体的对两个表的id实现更新的代码
                  commit;//提交
               except
                  rollback;//如果中途发生错误,取消已经完成的操作
                  raise;//从新触发异常,交给后面的处理过程
               end
              
             end;
         end;
      

  2.   

    如果确实有这么做,在先更新主表ID之前记下ID号,然后再让另一个表按此ID号搜索子表数据,然后更新数据为新的ID号(当然要用事务控制)否则当主表更新ID后,从表将无记录,从而更新不到从表!
      

  3.   

    因为主表ID一变,
    子表自然定位不到新ID,
    自然也就没有数据了
      

  4.   

    将b的合同号设为a的合同号的reference关系或者按 nxfbccu()的方法处理.
      

  5.   

    update 从表 set id=新id where id=旧id
      

  6.   

    上面的SQL语句应该与主表的更新放在一个事务里。
      

  7.   

    很简单的方法,在数据库中建立主从表关系,钩选‘级连更新’‘级连删除’两个选项。
    这样修改主表ID后POST,数据库会自己修改从表ID,你自己什么都不用做。
    明白了吗?呵呵!这是其中的一个简单有效的方法
      

  8.   

    很简单的方法,在数据库中建立主从表关系,钩选‘级连更新’‘级连删除’两个选项。
    这样修改主表ID后POST,数据库会自己修改从表ID,你自己什么都不用做。
    明白了吗?呵呵!这是其中的一个简单有效的方法
      

  9.   

    Access,sql server 2000都可以
      

  10.   

    用触发器, 关键语句:
     update 从表 set id=新id where id=(select id from deleted)
      

  11.   


    按你的要求,我觉得根本就不应该改id号,因为正是这个id是连接多个表的关键字段。
    如果业务真需要改合同号,那么建议合同号就不要作为表的主键,最好单独做一个合同号字段,各表之间还是用原来的id来连接。