假设: 
表A以身份证号作为主键.批量插入数据到表A 用什么方法忽略主键重复的记录继续插入而完成此次操作。类似于Access中的导入。然后对主键重复的记录另行处理。 这里就不讨论插入方法了,sql语句拼接也好,单条执行也好。 但是要避免的是对每一条记录到表A里select一次看是否存在。这样效率太低了。 问题是,还有什么更好的办法吗? 考虑过不使用身份证号作为主键的问题。假设生成自动增量ID字段作为主键。 批量插入后再删除重复记录中ID号高的那一条。问题是,这样的方法总感觉有点不得已而为之。 有请各位兄弟姐妹帮忙~ 在程序里这一块我主要是作错误处理。因为你没法保证用户不会提交重复数据,最人性化的当然是忽略并指出用户重复的数据,同时写入有效数据啦。主键选择应该没问题的。

解决方案 »

  1.   

    用 INSTEAD OF INSERT 触发器insert t select * from inserted a where not exists 
    (select 1 from t where 主键 =a.主键)
      

  2.   

    应该是判断是否存在,存在则不插入.例如两表A,B,都有身份证号.将B插入A.insert into A select * from B where 身份证号 not in (select 身份证号 from A)
      

  3.   

    insert   t   select   *   from   inserted  where  主键 not   in  
    (select  a.主键    from   t ,inserted a where   t.主键   =a.主键)
      

  4.   

    考虑过不使用身份证号作为主键的问题。假设生成自动增量ID字段作为主键。   批量插入后再删除重复记录中ID号高的那一条。你的这个方法有点牵强,不过可以提高速度.
      

  5.   

    应该是判断是否存在,存在则不插入. 例如两表A,B,都有身份证号.将B插入A. insert   into   A   select   *   from   B   where   身份证号   not   in   (select   身份证号   from   A) 考虑过不使用身份证号作为主键的问题。假设生成自动增量ID字段作为主键。       批量插入后再删除重复记录中ID号高的那一条。 你的这个方法有点牵强,不过可以提高速度.
    ----------------谢谢两位~。