开场白:前边一段为前期数据准备
后边t-sql为筛选出重复的行数-1,即为需要删除的数据,其中guid必须唯一
--前期准备 SELECT ProviderGUID,bankaccounts,count(1) as bum INTO #temp1 from p_ProviderBanks group by ProviderGUID,bankaccounts having count(1)>1 SELECT rowid=IDENTITY(INT,1,1),flag=0, providerguid,a.ProviderBankGUID,a.BankAccounts INTO #temp2 FROM p_ProviderBanks a WHERE EXISTS (SELECT * FROM #temp1 WHERE a.ProviderGUID=ProviderGUID AND a.BankAccounts=BankAccounts) SELECT TOP (10-1) * FROM #temp1 SELECT rowid=IDENTITY(INT,1,1),flag=0,providerguid,BankAccounts,bum INTO #temp3 FROM #temp1 SELECT * FROM #temp2 SELECT * FROM #temp3 DROP TABLE #temp3 --删除重复数据 BEGIN SET NOCOUNT ON DECLARE @num INT DECLARE @rowid INT DECLARE @providerguid UNIQUEIDENTIFIER DECLARE @bankaccounts VARCHAR(400) SELECT @rowid=MIN(rowid) FROM #temp3 WHERE flag=0 DECLARE @strsql NVARCHAR(200) --CREATE TABLE erpbak.dbo.tempdelete --( --providerbankguid UNIQUEIDENTIFIER --) PRINT @rowid WHILE @rowid is not NULL BEGIN SELECT @providerguid=ProviderGUID,@bankaccounts=BankAccounts,@num=bum FROM #temp3 WHERE rowid=@rowid SET @num=@num-1 --PRINT @bankaccounts --PRINT @num SET @strsql=' insert into erpbak.dbo.tempdelete SELECT TOP '+CAST( @num AS VARCHAR(5) )+' ProviderBankGUID FROM #temp2 WHERE BankAccounts='''+CAST(@bankaccounts AS VARCHAR(100))+''' AND ProviderGUID='''+CAST(@providerguid AS VARCHAR(100))+'''' --PRINT @strsql EXEC sp_executesql @strsql UPDATE #temp3 SET flag=1 WHERE rowid=@rowid SELECT @rowid=MIN(rowid) FROM #temp3 WHERE flag=0 END SET NOCOUNT OFF END