博客中,Insus.NET有分享过处理重复记录的功能。如《https://www.cnblogs.com/insus/p/10890148.html

今天就改编这个,改为动态存储过程。日后可以针对任一张表来进行。

删除多个重复记录

 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Insus.NET
-- Blog:        https://insus.cnblogs.com
-- Create date: 2019-05-31
-- Update date: 2019-05-31
-- Description: 删除多个重复记录
-- =============================================
CREATE PROCEDURE [dbo].[usp_Delete_Multiple_Duplicate_Record] (
    @TABLE_NAME SYSNAME, 
    @Refer_Column_lists NVARCHAR(MAX) -- '[a],[b],[c]'
)    
AS
BEGIN    
    DECLARE @query NVARCHAR(MAX) = N'
    ;WITH cte_temp_table(rank_num,'+ @Refer_Column_lists +')
    AS (
       SELECT ROW_NUMBER() OVER(PARTITION BY '+ @Refer_Column_lists +' ORDER BY '+ @Refer_Column_lists +') AS rank_num, '+ @Refer_Column_lists +'
       FROM '+ @TABLE_NAME +'
    )
    DELETE FROM cte_temp_table WHERE rank_num > 1;
    '

    EXECUTE sp_executeSql @query
END
Source Code

相关文章: