如何去重一個SQL Server表
--步驟0, 根據原表table_a, 創建一個臨時表table_a_temp, 僅僅增加了一個自增列row_id, 原因是SQL Server沒有類似Oracle的rowid偽列, 我們就自己造一個.
--假設原表的結果為: create table table_a (pk int, other_field char(10));
create table table_a_temp (pk int, other_field char(10), row_id int IDENTITY(1,1) NOT NULL);
--步驟1, 將重復PK的記錄加載到臨時表table_a_temp
truncate table table_a_temp ;
insert into table_a_temp(pk, other_field) select pk, other_field
from table_a a group by pk, other_field having count(*)>1 ;
--步驟2, 刪除所有重復PK的記錄, 這不是去重
--SQL Server 關聯delete的寫法有點詭異 delete table_a from table_a
delete table_a from table_a b inner join
(
select pk,other_field from table_a a group by pk, other_field having count(*)>1
) c
on b.pk=c.pk and b.other_field=c.other_field ;
--步驟3, 重表table_a_temp. 因為table_a_temp表有一個自增字段row_id, 這時候, 我們就可以利用row_id來去重
--代碼略, 可參考oracle版本的代碼(link)
--步驟4, 將去重后的table_a_temp記錄補會到原表table_a, 這樣table_a就沒有重復的pk
insert into table_a (pk, other_field) select pk, other_field from table_a_temp ;

浙公網安備 33010602011771號