方法:
| 代碼如下 |
複製代碼 |
select distinct * into #tmp from tablename drop table tablename select * into tablename from #tmp drop table # tmp |
常有時候遇到需要刪除SQL Server中的重複記錄,這裡有一些常用的重複資料刪除記錄的SQL,
最常用的 T-SQL 陳述式:
| 代碼如下 |
複製代碼 |
DELETE FROM [dbo].[myTable] WHERE 主鍵 NOT IN (SELECT MAX(主鍵) FROM [dbo].[myTable] GROUP BY 列1, 列2, 列3)從 SQL Server 2005 以後,用 CTE: WITH tmpOrderdTable AS ( SELECT GroupID = ROW_NUMBER() OVER (PARTITION BY 列1, 列2, 列3 ORDER BY 主鍵) FROM [dbo].[myTable] ) DELETE FROM tmpOrderdTable WHERE GroupID > 1 |
為了提高效率可以先開啟單人存模數式,刪除完再恢複多人存模數式:
# 開啟單人存模數式
| 代碼如下 |
複製代碼 |
USE [master] ALTER DATABASE [myDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE # 開啟多人存模數式 USE [master] ALTER DATABASE [myDB] SET MULTI_USER WITH ROLLBACK IMMEDIATERelated Posts |
SQL預存程序刪除
| 代碼如下 |
複製代碼 |
declare @max integer,@id integer declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主欄位 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0
|
A:保留id最大的行,刪除其它行
方法1
| 代碼如下 |
複製代碼 |
delete [user] from [user] t inner join(select name,max(id) as id from [user] group by name) a on t.name = a.name and t.id <> a.id |
B:保留id最小的行,刪除其它行
方法1
| 代碼如下 |
複製代碼 |
delete [user] from [user] t inner join(select name,min(id) as id from [user] group by name) a on t.name = a.name and t.id <> a.id
|