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

2024-05-16 11:18

本文主要是介绍已更新或删除的行值要么不能使该行成为唯一行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     都说有技在身,行走无忧!可是在最近的项目中却体会到了有技却并不见到万事可破,还需要面对各种各样的变化。按照以往删除一条记录的时候只需要delet就完全可以解决,担当存在多行记录相同的时候,就会提示“一更新或删除的行值要么不能使行成为唯一行,要么改变了多个行”,在网上查了一些资料,感觉以下的比较不错,拿来和大家分享,以便自己学习。

    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

这篇关于已更新或删除的行值要么不能使该行成为唯一行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994756

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新