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 的选项
------解决方案--------------------
sql server没有这个。
在sql server 就把主键删掉把,就不会报错了。
------解决方案--------------------
另外,如果有外键 引用这个表的主键,可能会导致,主键删除不掉,这个时候需要先把外键给删除掉。