新闻建站cms系统、政府cms系统定制开发

广州网站建设公司-阅速公司

asp.net新闻发布系统、报纸数字报系统方案
/
http://www.ysneo.com/
广州网站建设公司
您当前位置:首页>sqlserver数据库

sqlserver数据库

SQL Server表中删除具有重复主键标识列的重复行

发布时间:2024/5/26 21:11:02  作者:Admin  阅读:92  

广告:

示例:表名为test,主键列为id,另外一列为name
注意:如果使用 insert和select联合语句,需要将id列标识列临时去掉。之后要还原。

--插入重复行到临时表
SELECT DISTINCT *
INTO temp_table
FROM test
GROUP BY id,name
HAVING COUNT(id) > 1
go
--如果提示选择列表中的列 'test.name' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。则 GROUP BY id 改为GROUP BY id,name
go

--删除原表重复行所有数据(重复两行都会删掉) 
DELETE test
WHERE id
IN (SELECT id
FROM temp_table)
go 

--还原数据。如果使用 insert和select联合语句,需要将id列标识列临时去掉
INSERT test
SELECT *
FROM temp_table
go
--删除临时表
DROP TABLE temp_table 

多列:

--查询是否存在重复的数据
dbcc checktable('pos_t_saleflow_pre')
select flow_no, flow_id
from pos_t_saleflow_pre
group by flow_no, flow_id
having count(1) > 1

--删除表中重复的数据
while exists(select flow_no, flow_id
from pos_t_payflow_pre
group by flow_no, flow_id
having count(1) > 1)
begin
set rowcount 1
delete a
from pos_t_payflow_pre a
inner join (select flow_no, flow_id
from pos_t_payflow_pre
group by flow_no, flow_id
having count(1) > 1) b on a.flow_no = b.flow_no and a.flow_id = b.flow_id
set rowcount 0
end

附加:

手动插入数据

SET IDENTITY_INSERT [dbo].[test] ON --如果表有 IDENTITY 列,则在将数据还原到原始表时,必须使用 SET IDENTITY_INSERT ON。[dbo].[test]后面加.不是dbo.test
INSERT [dbo].[test] ([id], [name]) VALUES (12, N'454545')
SET IDENTITY_INSERT [dbo].[test] OFF

提示:仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'test1'中的标识列指定显式值。
解决:如果使用insert和select联合语句,需要将原表id列标识列临时去掉。数据还原后再手动设计还原为标识列字段。

广告:

相关文章
SQL Server
删除重复行
cms新闻系统购买咨询
扫描关注 广州阅速软件科技有限公司
扫描关注 广州阅速科技