日期:2014-05-17  浏览次数:20890 次

insert into 插入数据时是如何忽略掉错误
有一张表 ,如下所示
create table test 
(
  xh char(6),--人员序号
  worktime datetime, --打卡时间
  machineid char(2) --考勤机编号
)
xh 与 worktime 为联合主键

每次从考勤机中将考勤时间下载下来,每次下载完成后,考勤机中的记录不一定会进行清空,
所以就会导致有些考勤时间在数据库会重复存在,在执行插入操作时就会失败(主键重复了)
现在的方法是在程序中判断是否有重复的记录,但是这样的效率太低,数据量太大,
那么如何忽略掉这个错误,继续执行后面的插入语句,

------解决方案--------------------
你加判断就是为了去除重复,那不管错误继续执行不就失去了原来的意义吗?主键、唯一约束都能避免,不过一样有开销。
------解决方案--------------------
如果要更新已有的记录,很麻烦(或者说效率很低),我以前用类似的方法做过,我用INSERT INTO ... VALUE ...一条一条插入, 检错时如果发现是重复主键错误,则先删除这条记录, 再resume, 即重新插入.
慢就慢在删除时又整个表找了一遍,我试了四千条重复的插入,用insert into ... select到一个新表,只要几秒钟,而用先删除重复再插入的方法, 时间约用了1分钟!
------解决方案--------------------
建议楼主用另外一个临时固定表(tblTemp)来存储考勤机上的打卡记录
先从考勤机里下载到tblTemp(下载前清空此表)后再将其未重复的记录插入到你的打卡记录表test里去
------解决方案--------------------
CREATE INDEX 语法中有:IGNORE_DUP_KEY 的选项
------解决方案--------------------
引用:
mysql  有  insert ignore into  这个关键字
他这样,当违背了唯一约束的时候~就会直接跳过,不会报错。
不知道  ms sql 是否有这样的关键字


sql server没有这个。

在sql server 就把主键删掉把,就不会报错了。
------解决方案--------------------
引用:
Quote: 引用:

你要这样的话只能把主键取消

就是的,我在试看看,谢谢


另外,如果有外键 引用这个表的主键,可能会导致,主键删除不掉,这个时候需要先把外键给删除掉。