`
webdev2014
  • 浏览: 678359 次
文章分类
社区版块
存档分类
最新评论

SQL SEVER 报错;未删除任何行,已更新或删除的行值要么不能是该行成为唯一行,要么改变了多个行。

 
阅读更多

交流很重要!上次师傅给开会时候,说出了心中的一点困惑:虽然学了SQL SEVER 视频,并且基本上都实现了机房收费系统的各项功能,但是对于SQL SEVER中的很多知识点还是一窍不通!比如触发器,存储过程,主外键,批处理等还是迷迷糊糊的一头雾水!师傅很利索的来了一句让我当初感觉“站着说话不腰疼”的话:"你可以用上触发器或者存储过程来解决一下你在机房收费系统中的问题!" 好奇心害死猫,这句话真的不怎么对——至少对于目前的我而言。我是一个乖孩子,哈哈哈。师傅的话,更重要的是自己的好奇心迫使自己扎进SQL SEVER中重新探索起来。

于是自己重新摸索着在数据库中建立触发器;自己当时的思路是:对于机房收费系统中的学生退卡后,那么在学生退卡表中添加相应的记录,同时学生注册表中就应该删除所退卡的学生信息。和别人交流后,就尝试着用触发器来解决这个问题。自己在没建立触发器之前,删除两个表中的数据没有任何报错提示。但是当我建立好触发器:

use charge
go 
create trigger [tr_1] 
on studentcancelcard 
after delete
as
delete from StudentRegisterInfo where cardid ='1'
go

时,再次去删除表studentcancelcard表中卡号为1 的学生信息的时候,突然报错:


以前也遇到过这样的问题,当时看的迷迷糊糊,上网查后也是不知所云;现在仔细的看一下才明白了那么一点点:因为我在表studentcancelcard表中建立的触发器,这个出发器的功能是:在studentcancelcard删除数据时,那么同时删除表studentregister中卡号为1的学生信息。因为这个触发器,关联着两个表,所以当进行删除操作的时候,会报如上图所示错误。现在看上图中的错误消息:已更新或删除的行值不能使该行成为唯一行,要么改变了多个行。仔细理解一下,也就是说数据库表中有关联,如果对一个表中的记录进行操作,那么会引起另一个表的变化。

对于这个问题,如果想要删除某条有联系的记录的话,我们可以通过sql 语句来删除,例如:

use charge 
delete from StudentCancelCard where cardid ='1'

删除成功!

总结一下:对于这个问题,就是所操作的表与数据库中的其他表有关联。想要删除,用sql语句删除就可以了;更重要的是:说的:一切派都是纸老虎!!!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics