神魂顛倒論壇logo

icon
首頁Microsoft 應用技術區資料庫 MS SQL → MS SQL 刪除重複的資料並保留一筆

雷射溶脂 | 瘦小腹 | 植髮 | 眼袋 | 玻尿酸 | 電波拉皮 | Flash | 購物車 | Flash Player 11.2 | 豐胸 |

下一主題 上一主題


MS SQL 刪除重複的資料並保留一筆


MS SQL 刪除重複的資料並保留一筆 簡版






MS SQL 刪除重複的資料並保留一筆

-- 刪除資料表重複的資料並保留一筆
-- 2009.08.19 By Sdany
set nocount on;
-- 測試的暫存資料表
create table #t ([name] nvarchar(100),[sex] nvarchar(20))
insert into #t select 'AA','B'
insert into #t select 'BB','M'
insert into #t select 'AA','B'
insert into #t select 'CC','M'
insert into #t select 'DD','B'
insert into #t select 'CC','M'
--select * from #t
-- 變數定義及預設值
declare @tablename nvarchar(100)
 ,@fields nvarchar(4000)
 ,@where nvarchar(1000);
select @tablename='',@fields='',@where='';
-- 輸入資料表名稱
set @tablename='#t';
-- 輸入判斷重複相同資料的欄位
set @fields='[name],[sex]';
-- where 條件
--set @where='[name]=''AA''';
-- 如果 @fields 為空值,取得所有欄位;資料表名稱不得為 # 暫存資料表
if ( not left(@tablename,1)='#' and @fields = '' )
begin
 declare @sql nvarchar(4000);
 set @sql='select @fields=@fields
   +case @fields when '''' then '''' else '','' end
   +''[''+syscolumns.name+'']''
  from sysobjects inner join syscolumns
  on sysobjects.id = syscolumns.id
  where (sysobjects.name = '''+@tablename+''')
  order by syscolumns.colorder;';
 exec sp_executesql @sql,N'@fields varchar(4000) out',@fields out;
end

if ( not @where='' ) set @where=' where '+@where
-- 插入自動遞增欄位
exec('alter table '+@tablename+' add [Remove_ID_Index] bigint identity(1,1);');
-- 刪除重複資料,保留遞增值最小的資料
exec('delete from '+@tablename+'
 where [Remove_ID_Index] in (
  select max([Remove_ID_Index])
  from '+@tablename+@where+'
  group by '+@fields+'
  having count(*)>1
 );');
-- 刪除自動遞增欄位
exec('alter table '+@tablename+' drop column [Remove_ID_Index];');
select * from #t
-- 刪除測試的暫存資料表
drop table #t
set nocount off;





購物車 | 回到頂部
Icon
※本處所提供的所有資源均由在網上搜集而來,若有侵權敬請告知。

※僅作為個人測試使用,測試完畢請於下載後24小時內將其刪除。

※敬請尊重智慧財產權,請購買正版有保障之商品,並請支持正版。

※本空間與本人將不對任何資源或內容負起任何相關法律責任。

下一主題 上一主題