SQL Server 2000刪除表中的重復記錄
SQL Server 2000如何刪除表中的重復記錄(記錄完全相同才算重復記錄)?
四板斧——輕松消除重復記錄
殊不知在SQL Server中有一種更為簡單的方法,它不需要用游標,只要寫一句簡單插入語句就能實現刪除重復記錄的功能。為了能清楚地表述,我們首先假設存在一個產品信息表Products,其表結構如下:
| CREATE TABLE Products ( ProductID int, ProductName nvarchar (40), Unit char(2), UnitPrice money ) |
表中的數據如圖1:
圖1中可以看出,產品Chang和Tofu的記錄在產品信息表中存在重復。現在要刪除這些重復的記錄,只保留其中的一條。步驟如下:
第一板斧——建立一張具有相同結構的臨時表
| CREATE TABLE Products_temp ( ProductID int, ProductName nvarchar (40), Unit char(2), UnitPrice money ) |
第二板斧——為該表加上索引,并使其忽略重復的值
方法是在企業管理器中找到上面建立的臨時表Products _temp,單擊鼠標右鍵,選擇所有任務,選擇管理索引,選擇新建。如圖2所示。
按照圖2中圈出來的地方設置索引選項。
![]() |
第三板斧——拷貝產品信息到臨時表
| insert into Products_temp Select * from Products |
此時SQL Server會返回如下提示:
服務器: 消息 3604,級別 16,狀態 1,行 1
已忽略重復的鍵。
它表明在產品信息臨時表Products_temp中不會有重復的行出現。
第四板斧——將新的數據導入原表
將原產品信息表Products清空,并將臨時表Products_temp中數據導入,最后刪除臨時表Products_temp。
| delete Products insert into Products select * from Products_temp drop table Products_temp |
這樣就完成了對表中重復記錄的刪除。無論表有多大,它的執行速度都是相當快的,而且因為幾乎不用寫語句,所以它也是很安全的。
小提示:上述方法中刪除重復記錄取決于創建唯一索引時選擇的字段,在實際的操作過程中讀者務必首先確認創建的唯一索引字段是否正確,以免將有用的數據刪除。
如果記錄完全相同才算重復記錄,那么: (sql server2000下測試通過)
select distinct * into #tmpp from tid
delete from tid
insert into tid select * from #tmpp
drop table #tmpp
如果有id主鍵(數字,自增1的那種),那么:(sql server2000下測試通過)
delete from tableA where id not in
(select id = min(id) from tableA group by name)
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。


浙公網安備 33010602011771號