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,时出现重复,(更新是一行一行更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值