已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)

转载 2012年03月26日 19:28:53

SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)

sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表.

错误:

 

先确认一下表中有没有主键,要是没有就得使用临时表来实现删除重复的行。
方法一:
DELETE FROM 表名 WHERE 主键字段名 IN(
SELECT MAX(主键字段名) AS 主键字段名 FROM 表名 GROUP BY 其他字段 HAVING COUNT(1)>1)

方法二:
SELECT 字段列表  INTO #T FROM 表名 GROUP BY 字段列表
--先删除原来的数据表,再插入不重复的语句
TRUNCATE TABLE 表名
INSERT INTO 表名 SELECT * FROM #T 
DROP TABLE #T

 

示例:

方法一:

delete from tab_test2 where id=(select max(id) from tab_test2  group by id,uid having count(1)>1)

 

方法二:注意:#t是临时表,在tempdb数据库中的临时表节点下可以找到,sqlserver服务重启就会消失的表.

select id,uid into #t from tab_Test2 group by id,uid

truncate table tab_Test2

insert into tab_Test2 select * from #t

 

msdn:

在进行SQL数据库维护时,发现有几行记录明显有错误却删除不了,一执行删除命令就提示“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(X行)。”表现为在:数据库中出现了重复的键值或数据,当试图删除时错误提示信息就出来了。建立的几个表都没有关键字,设置好关键字后问题解决。

微软的官方网站对此问题也有说明,BUG: 您可能会收到当您尝试使用 SQL Server Management Studio 更新 SQL Server 2005 中的表的行时 微软给了个替代方法:要变通解决此问题,创建 SQL Server Management Studio 中的在新的查询窗口。 然后,运行 SQL UPDATE 语句更新表中的行。

方法一:

1、单击SQL  Server  Management Studio工具栏上的“新建查询”按钮,然后按照提示登陆要修改的数据表所在的数据库

2、然后会在数据库的编辑窗口弹出一个可以执行SQL语句的窗口,在该窗口输入以下SQL语句

delete      数据库名.表名     where    要删除的字段名 =     '字段值'

例如:delete pyj_db.dbo.Cellphone_related where Cellphone_Num = '111'

 


方法二:

其实利用INSERT INTO 做一些小的变换,这个问题就可迎刃而解了,具体步骤如下:

先将原用的表做个备份,根据条件将满足条件的数据导到新的表来,再将原表清除,最后将备份表中的数据select过来即可。

第一步:在备份表中导入需要的数据

INSERT INTO DataFile_backup
select * from DataFile where year(consumedate)=条件

第二步:清除原表中的数据

Delete from DataFile

第三步:从备份表中导入数据

select * from DataFile

关于SQL:已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行

在对一个表做试验的时候,往里面添加了几条数据,后来发现原本想作为主键的字段的值都为"NULL",这可不行,删除重新来吧。选中删除的时候就出现了 “已更改或删除的行值要么不能使改行成为唯一行,要么改变了...
  • woailuo453786790
  • woailuo453786790
  • 2015年04月19日 08:58
  • 1870

已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行

其实这种错误是很常见的。当做自己的一个笔记,如果你有遇到像我这样的问题,欢迎参考。也欢迎相互交流。 错误名字:已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行。   通过查阅资料...
  • u010176014
  • u010176014
  • 2014年08月24日 14:53
  • 2425

已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行,如何解决

操作数据库时经常遇到“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行,如何解决,添加主键,使行值成为唯一值,...
  • fightfaith
  • fightfaith
  • 2015年07月26日 14:45
  • 1906

关于SQL:已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行

在对一个表做试验的时候,往里面添加了几条数据,后来发现原本想作为主键的字段的值都为"NULL",这可不行,删除重新来吧。选中删除的时候就出现了 “已更改或删除的行值要么不能使改行成为唯一行,要么改变了...
  • woailuo453786790
  • woailuo453786790
  • 2015年04月19日 08:58
  • 1870

已更新或删除的行值要么不能使该行成为唯一行

sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表. 错误:   先确认一下表中有没有主键,要是没有就得使用临时表来实现删除重复的行。 ...
  • u010508826
  • u010508826
  • 2014年11月21日 19:22
  • 1124

已更改或删除的行值要么不能使该行成为唯一行,要么改变了多个行

最近真是错误百出,越是想完美,查出的错误越多。                          动不动就出来个错误,你是在教我成长吗?好吧。鄙人承认已经被这些错误磨得没有了脾气。下面小编就开...
  • zhang18330699274
  • zhang18330699274
  • 2016年05月01日 11:05
  • 484

SQL中:已更新或删除的行值要么不能使改行成为了多个行

做机房收费系统的时候,最开始不知道机房收费系统的操作原理,就随便在数据库中填写东西,结果最终明白了系统的工作逻辑之后,想删除SQL中的一些数据结果出状况了!如下:             表现为在...
  • u010196821
  • u010196821
  • 2013年10月27日 18:49
  • 1837

SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)

http://www.cnblogs.com/jhxk/articles/1614963.html sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表...
  • zunguitiancheng
  • zunguitiancheng
  • 2015年08月04日 09:51
  • 412

SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)

sqlserver中多行所有数据重复,无法更新或删除问题,通常是在没有主键的情况下的表. 错误:   先确认一下表中有没有主键,要是没有就得使用临时表来实现删除重复的行。 方法一: DE...
  • Andrewniu
  • Andrewniu
  • 2017年07月07日 09:40
  • 173

SQL Server 未删除任何行

背景: 今天在测试上机功能能否正常存入数据的时候,因为测试吗,都懂得,所以就多点了几下上机的按钮。 然后就去数据库中看一些有没有存进去,可喜的是数据存入了,可悲的是数据不能删除了。 下面...
  • loonsd
  • loonsd
  • 2016年03月20日 16:51
  • 2045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行(2行)
举报原因:
原因补充:

(最多只允许输入30个字)