设为首页 收藏本站
查看: 995|回复: 0

[经验分享] sql server“键列信息不足或不正确。更新影响到多行”

[复制链接]

尚未签到

发表于 2018-10-20 14:36:45 | 显示全部楼层 |阅读模式
  环境:windows server 2003 sp2,sql server 2000,用于管理固定资产的软件。
  故障现象:
  要同时增加两台思科交换机的固定资产信息,由于型号什么都一致,只是序列号不一样。于是就想做完一台后,能否直接复制一条单据过来改一下不一致的地方就行了。但是前台无法实现。本着偷懒和学习的态度,杀到后台,直接打开数据库操作。 去了主键限制,用下面语句复制:
INSERT INTO da111  

  
SELECT *
  

  
FROM da111
  

  
WHERE (scodel = '03-ne-076')
  复制完后,在结果列表中找到新复制的行,直接手动修改主键ID,想让两条语句有所区别。此时,只要鼠标点击此行以外其他地方,就提示“键列信息不足或不正确。更新影响到多行”,如下:
DSC0000.jpg

  比较崩溃的是,不管是再重装改回原来的ID值(还原成两行一模一样),或者用删除语句删除重复,都会弹出如上警告,只有从右上角整个关闭查询分析器窗口,才能进行其他的操作。
  原因分析:
  不管是用语句,还是用鼠标直接在表格里选中修改,其实都是update。对数据库来说,此时等于是对两条一模一样的行进行修改,对SQL SERVER来是不允许的。所以就会有如上提示。
  那么对ORACLE来说会不会因为有ROWID的存在,就允许看上去一模一样的行修改呢?晚点测试一下。
  解决方法:
  知道原因,解决办法就好找了。
  方法1.删除所有的重复行,重新手动一条条做!注意,需要关闭窗口重新打开查询分析器窗口来运行语句:
DELETE FROM da111_bak2   --也可以直接用delete da111_bak2,不加from  

  
WHERE (scodel = '03-ne-076')
  检查表相关性的时候,可以用以下窗口来检查。但是只能检查过程、触发器之类的,如果是被别的表引用,似乎检查不出来,所以,用此方法既麻烦又不安全。
DSC0001.jpg

DSC0002.jpg

  方法3.先删除表中主键约束,再复制行,然后用限定影响行数的方式修改其中的一行的ID,然后恢复主键约束。此法很棒,推荐
--查询约束名,并删除约束  
exec sp_helpconstraint 'da111_bak2'
  
alter table da111_bak2
  
drop
  
constraint pk_da111_bak2
  
--复制行
  
INSERT  da111_bak2
  
SELECT *
  
FROM da111_bak2
  
WHERE (scodel = '03-ne-076')
  
/*设置影响的行数,此处复制了一次,只设置1,如果复制了多次共有n行重复,想最后只保留一行不被影响,则设置为n-1*/
  
SET ROWCOUNT 1
  
--更新其中的1行,将ID值更改。
  
update da111_bak2
  
set id='14824553714603914625651755433750' --设置一个不同的值
  
WHERE (scodel = '03-ne-076')
  
--还原设置S
  
SET ROWCOUNT 0
  
--恢复主键约束
  
alter table da111_bak2
  
add
  
constraint pk_da111_bak2
  
primary key (id)
  参考:http://blog.163.com/m13864039250_1/blog/static/21386524820133155536227/
  http://blog.sina.com.cn/s/blog_415b73d101000838.html



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624171-1-1.html 上篇帖子: Skype For Business Server 2015 离线消息 下篇帖子: sql 常见增删改查
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表