SQL SERVER 2000更新提示主键重复

解决主键冲突问题
本文探讨了在数据库更新过程中遇到的主键重复问题,并提供了一种解决方案:通过暂时移除组合主键,更新数据,删除重复项后再重新设置主键。

表hr_carddata主键是YYMMDD,  CardID,  CardTime,  CardMachineID 4个列组成的组合主键,

 表hr_employee主要列是empno(主键),cardid

现在要将hr_carddata中的cardid更新为empno,

更新前查询

select YYMMDD,  CardID,  CardTime,  CardMachineID,count(yymmdd) from hr_carddata
GROUP BY YYMMDD,  CardID,  CardTime,  CardMachineID having count(yymmdd)>1

无结果

得出结论,hr_carddata主键唯一,没有重复

 

更新hr_carddata

update hr_carddataset hr_carddata.cardid=hr_employee.empno from hr_employee where hr_carddata.cardid=hr_employee.cardid and hr_employee.cardid<>hr_employee.empno

 

 

提示主键重复,疑问?empn列唯一,(YYMMDD,  CardID,  CardTime,  CardMachineID
)组合唯一,但更新却出现重复

解决办法:

先将组合主键去掉,然后更新,再用

select YYMMDD,  CardID,  CardTime,  CardMachineID,count(yymmdd) from hr_carddata
GROUP BY YYMMDD,  CardID,  CardTime,  CardMachineID having count(yymmdd)>1

查询,查出了重复值,然后删除重复,再将主键加上,即可

 

为什么出现这样的问题?如下数据

cardid   empno

000001 000002
000002 000004
000005 000006
000007 000008
000009 000010
000011 000012 

更新前都是唯一的,但将cardid更新为empno,时出现重复,(更新是一行一行更新)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值