博客中,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