首页 > 解决方案 > 如何编写存储过程来查找和删除 SQL Server 中没有主键的重复项

问题描述

我正在尝试从包含 29 列的表中查找并删除重复项,如下所示:

[Partitioned Commodity Code] (nvarchar(max),null)
[Supplier] (nvarchar(255),null)
[Manufacturer] (nvarchar(255),null)
[Order ID] (nvarchar(55),null)
[Status] (nvarchar(25),null)
[Ordered Date] (nvarchar(105),null)
[Order Method] (nvarchar(55),null)
[Ship to Address] (nvarchar(255),null)
[Address] (nvarchar(255),null)
[City]  (nvarchar(55),null)
[State]  (nvarchar(55),null)
[Postal Code]  (nvarchar(55),null)
[Requisitioner] (nvarchar(100),null)
[Accounting Entity] (nvarchar(255),null)
[Preparer] (nvarchar(255),null)
[Item No] (float,null)
[Description] (nvarchar(max),null)
[Nominal Account] (nvarchar(255),null)
[LineItem ProjectCode] (float,null)
[Cost Center] (nvarchar(100),null)
[CostCenter Description] (nvarchar(max),null)
[Supplier Part Number] (float,null)
[Is Catalogue] (nvarchar(55),null)
[Unit Price] (float,null)
[Quantity] (float,null)
[Line Item Total] (float,null)
[Line Item Total USD] (float,null)
[Currency] (nvarchar(55),null)
[Request Cross Reference] (nvarchar(55),null)

在这个数据集中,没有主键,老实说,我无法弄清楚哪些键组合可以被视为主键来查找和删除重复项。

我尝试了下面的代码考虑[Order ID]

select *
from [PO_BuySmart_Main] a
join 
    (select [Order ID], count(*) as OID  
     from [PO_BuySmart_Main] 
     group by [Order ID] 
     having count(*) > 1 ) b on a.[Order ID] = b.[Order ID]
order by a.[Order ID]

我想考虑所有列以检查重复并相应地删除这些记录。

[PO_BuySmart_Main]是单个存储过程将为其执行此任务的表名。

任何帮助将不胜感激,谢谢。

标签: sql-server

解决方案


推荐阅读