求sql语句,只修改重复数据中的一条记录

求sql语句,只修改重复数据中的一条记录,第1张

不会是id都相同吧

select A from 表 group by A having count(A)>1

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)

select from vitae a

where (apeopleId,aseq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a

where (apeopleId,aseq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count()>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select from vitae a

where (apeopleId,aseq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count()>1)

(二)

比方说

在A表中存在一个字段“name”,

而且不同记录之间的“name”值有可能会相同,

现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;

Select Name,Count() From A Group By Name Having Count() > 1

如果还查性别也相同大则如下:

Select Name,sex,Count() From A Group By Name,sex Having Count() > 1

(三)

方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count() from 表名 group by 主字段 having count() >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0

方法二

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct into #Tmp from tableName

drop table tableName

select into tableName from #Tmp

drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录, *** 作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)查询重复

select from tablename where id in (

select id from tablename

group by id

having count(id) > 1

)

首先写一个函数:函数功能,传进来一个字符串,变小写,从左到右循环,每循环两次的时候,插入一个冒号,+1后再循环。以此类推。

这一套下来之后,结尾会多出一个冒号,记得用left干掉最后一位。

返回处理完的字符串

函数完毕

最后执行sql

update 表 set 字段=函数(字段) where 条件

1、首先我们打开SQL  SERVER的管理控制台,找到一个要设置角色的用户

2、下面我们将为这个用户赋予创建数据库的角色,我们先用这个用户登录管理工具看一下是否具有创建用户的权限。

3、进行数据库创建的时候,提示如下的错误,证明这个用户不具备这个角色的权限。

4、下面我们登录sa用户,找到这个用户,右键单击选择属性。

5、然后在d出的属性页面中,我们选择服务器角色,如下图所示,勾选dbcreater角色。

5、角色选择好以后,下面我们在用那个用户登录管理工具进行数据库的创建,这个时候你会发现它不报错了,证明用户已经具备了dbcreater的角色。

添加判断语句,判断有时,就修改

一是多写几个更新语句,一次更新一个字段

二是把更新语句,拼接成string形式,最后一次执行

或用 @@rowcount判断是否存在:

create procedure alStuentsInfor

@StuId char(10),

@StuImage IMAGE=null,

@StuName varchar(20)=null,

@StuSex char(5)=null, @StuAge smallint=null

AS

BEGIN

UPDATE dboStudents

SET iStuImage = ISNULL(@StuImage,iStuImage),

vStuName = ISNULL(@StuName,vStuName),

cStuSex = ISNULL(@StuSex,cStuSex),

sStuAge = ISNULL(@StuAge,sStuAge)

WHERE cStudentsId = @StuId

IF @@ROWCOUNT>0

RETURN 0

ELSE

begin

PRINT'NO RECORDS FOUND!'

RETURN 1

END

END

GO

这个用触发器处理比较好

你可以创建一个插入触发器,当插入数据时将id 自动更新为要修改的值

类别如下其中inserted为触发器中的临时表,其结构与原表一样,保存新插入或修改後的数据。

create trigger insert_a_tri on A after insert as

update A set Aid = 'A' + Aid from inserted b where Aid = bid and adatetime = bdatetime and atestno = btestno

可以使用多种方式实现:

1: 同时更新两种表

update A set 字段=XX where 条件

update B set 字段=XX where 条件

2:使用触发器

在A表建立触发器 更新B表信息

create trigger on A for update

update B set 字段=XX where 条件(使用inserted ,deleted表)

----------------

调用直接使用更新语句更新A表即可

update A set 字段=XX where 条件

以上就是关于求sql语句,只修改重复数据中的一条记录全部的内容,包括:求sql语句,只修改重复数据中的一条记录、SQL语句修改数据库中某列的值。、SQL Server 数据库变成单个用户怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10191320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存