导入主键,加参数:  CONSTRAINTS=Y

解决方案 »

  1.   

    我的imp语句如下:
    imp aostareip/aostareip@eipdb file=d:\temp.db full=y ignore=y
    这个语句可以从temp.db文件把数据导入到eipdb数据库上,temp.db文件中只有T_SERIALNUM表的内容:
    SERIALNUM(PK) NAME
    --------------------------------------------------------------------------------
    26              version
    27              fieldID
    28              modelSys但是我的目的数据库中表T_SERIALNUM的记录为:
    SERIALNUM(PK) NAME
    --------------------------------------------------------------------------------
    26              version
    27              fieldID
    28              SysID可以看到最后一条记录的Name字段内容不一样,现在我希望用temp.db文件中的最后一条记录覆盖目的数据库该表的最后一条记录,因为该记录关键字内容都为28,所以上面的imp语句因为违反了唯一约束条件而不成功,我试了 newusers(newusers) 兄建议的加参数CONSTRAINTS=Y,写成如下模样:
    imp aostareip/aostareip@eipdb file=d:\temp.db full=y ignore=y constraints=y
    也不成功。
      

  2.   

    如是要覆盖原记录,
        imp aostareip/aostareip@eipdb file=d:\temp.db full=y ignore=y constraints=y
      不行,因为IMP命令到发出操作都是 INSERT 语句,可见有主键存在的情况下,是肯定没有办法
      导入相同主键的记录的,把目标表的主键屏蔽也只能是追加记录而以。所以要到入备份文件的记录
      只能先删除表的记录或是删除目的表中在temp.db文件相同主键的记录。
      

  3.   

    谢谢LGQDUCKY(飘)兄,用什么办法可以配合imp删除目的表中的记录呢,因为我在imp的时候可能不知道temp.db中到底有哪些表。
      

  4.   

    据我所知道的,IMP命令所带的参数是没有办法删除目的表中的记录的,
     加上 IGNORE = Y 参数只能是IMP出错时,进程将不会被中断,所以自己只
     能辛苦点了,如真的要覆盖记录,你可以建立个临时用户把TEMP.DB文件导
     进去,在做比较.
      

  5.   

    谢了,现在已经清楚了imp命令执行的是insert语句,所以永远不可能如此覆盖。