当我在sql server 2000中删除一行记录时,系统报错:键列信息不足或不正确。更新影响到过多的行。请问这是为什么?

luoxiang2000 2002-03-23 04:42:56
thanks!
...全文
535 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极海hein 2002-03-25
  • 打赏
  • 举报
回复
简单一点做法就系你的表中新加一个自动编号字段,然后删除相同的记录,你手工删除也行,用delete语句也行。
warning 2002-03-25
  • 打赏
  • 举报
回复
truncate table和delete table作用一样,都是从表中删除数据,不过写日志的方式不同。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
bigysw 2002-03-25
  • 打赏
  • 举报
回复
哦,说错了,default 约束不是外部关系!
bigysw 2002-03-25
  • 打赏
  • 举报
回复
truncate 是把表的数据全部清空,并不影响原表的约束等外部关系!
drop 则是把表整个删除,连表都不剩下,虽然随后我又用select * into table1生成了原表,但可能会影响原来已经存在的外部关系!

CSDNM(CSDN经理(信就不假) 用的那个东西不是临时表,只是名字有点像,它是数据库中实际存在的一个表,后来删除了。没什么影响。

估计你所用的这个表也没有什么外部关系,所以两个方法都行!
luoxiang2000 2002-03-25
  • 打赏
  • 举报
回复
sql server中可以设置自动编号的字段吗?怎么设置?
luoxiang2000 2002-03-23
  • 打赏
  • 举报
回复
他的办法和你的好像没有什么不同?!他不也是临时建一个表temptb
吗?truncate与drop又有什么不同?
bigysw 2002-03-23
  • 打赏
  • 举报
回复
distinct 是选择纪录中不相同的唯一的纪录,Blob等大容量指针类型的字段除外!
#表示临时表,在数据库系统中不长期保存,用过就算。

如 CSDNM(CSDN经理(信就不假) 所说,临时表有点危险,用它的办法保险!
luoxiang2000 2002-03-23
  • 打赏
  • 举报
回复
bigysw(大花脸):
麻烦详细解释一下你给的那一个sql语句!比如,distinct是什么意思?#tb

表前面加一个#号是什么表???
谢谢!
CSDNM 2002-03-23
  • 打赏
  • 举报
回复
原因,如 bigysw(大花脸) 所说。
解决方法:bigysw(大花脸)的方法可以,但用临时表太危险,而且容易丢掉表里的DEFAULT等约束,最好这样:

select distinct * into temptb from table1
go
truncate table table1
go
insert table1
select * from temptb
go
drop table temptb
go
xiaolun 2002-03-23
  • 打赏
  • 举报
回复
如果你直接运行SQL语句删除行,应该不会出这样的错吧!如果你实在某一个
工具里删除,如DB explorer...,可能是你的表没有主键,SQL Server无法定
位你想要删除的行,如果你的表没有主键的话,表中有可能存在完全相同的
行(所有的列值都相同),这时你是不可能删除其中某一行的,只能用SQL语
句删除所有的行!
bigysw 2002-03-23
  • 打赏
  • 举报
回复
老问题,你的表中有完全相同的两条或者多条纪录。
你的表设计有问题,应该设置关键字。

目前的处理办法:

select distinct * into #tb from table1
drop table table1
select * into table1 from #tb

运行一下上面的语句,OK!
然后修改表结构,加上关键字

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧