自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解如何刪除SQL Server表中的重復(fù)行

數(shù)據(jù)庫 SQL Server 數(shù)據(jù)庫運(yùn)維
Microsoft SQL Server 表不應(yīng)該包含重復(fù)行和非唯一主鍵。為簡(jiǎn)潔起見,在本文中我們有時(shí)稱主鍵為“鍵”或“PK”,但這始終表示“主鍵”。重復(fù)的 PK 違反了實(shí)體完整性,在關(guān)系系統(tǒng)中是不允許的。SQL Server 有各種強(qiáng)制執(zhí)行實(shí)體完整性的機(jī)制,包括索引、唯一約束、主鍵約束和觸發(fā)器。

如果表中有多組完全不同的重復(fù)的 PK 值,則逐個(gè)刪除它們會(huì)很費(fèi)時(shí)間。在這種情況下,可使用下面的方法:

 1.首先,運(yùn)行上面的 GROUP BY 查詢來確定有多少組重復(fù)的 PK 值及每組的重復(fù)數(shù)。

2.選擇重復(fù)的鍵值放入臨時(shí)表中。例如:

SELECT col1, col2, col3=count(*) 
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1

3.選擇重復(fù)的行放入臨時(shí)表中,以清除進(jìn)程中的重復(fù)值。例如:

SELECT DISTINCT t1.* 
INTO holddups
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2

4.此時(shí),holddups 表應(yīng)有唯一的 PK;但是,如果 t1 有重復(fù)的 PK 而行唯一(如上面的 SSN 示例),情況就不是這樣了。請(qǐng)驗(yàn)證 holddups 中的各個(gè)鍵是否唯一,是否沒有鍵重復(fù)而行唯一的情況。如果是這樣,您必須停在該處,確定對(duì)于給定重復(fù)的鍵值,您希望保留哪些行。例如,以下查詢:

SELECT col1, col2, count(*) 
FROM holddups
GROUP BY col1, col2

應(yīng)為各行返回計(jì)數(shù) 1。如果結(jié)果是 1,請(qǐng)繼續(xù)執(zhí)行下面的步驟 5。如果不是 1,則存在鍵重復(fù)而行唯一的情況,且需要您決定要保存哪些行。通常,這將需要舍棄行或?yàn)榇诵袆?chuàng)建新的唯一的鍵值。為 holddups 表中每個(gè)此種重復(fù) PK 執(zhí)行這兩個(gè)步驟之一。

5.從原始表中刪除重復(fù)的行。例如:

DELETE t1 
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2

6.將唯一行放回原始表中。例如:

INSERT t1 SELECT * FROM holddups 

【編輯推薦】

  1. 使用檢查約束驗(yàn)證SQL Server中的數(shù)據(jù)
  2. 淺談SQL Server數(shù)據(jù)庫并發(fā)測(cè)試方法
  3. 淺談如何優(yōu)化SQL Server服務(wù)器
責(zé)任編輯:彭凡 來源: 51CTO
相關(guān)推薦

2010-06-28 12:46:09

SQL Server

2010-09-01 16:47:18

SQL刪除

2010-07-12 09:52:24

刪除 SQL Serv

2010-10-22 16:29:11

SQL Server刪

2010-11-10 11:27:40

SQL Server重

2010-07-07 16:53:54

SQL Server重

2010-09-02 11:34:51

SQL刪除

2009-09-14 13:17:51

LINQ to SQLLINQ to SQL

2010-11-11 09:20:46

SQL Server創(chuàng)

2010-09-02 10:36:51

SQL刪除

2010-07-02 13:50:11

SQL Server數(shù)

2010-09-01 15:30:24

SQL刪除

2010-09-02 11:14:39

SQL刪除日志

2010-09-02 16:28:03

SQL刪除

2010-11-10 11:37:29

SQL Server刪

2010-07-08 13:06:05

SQL Server刪

2010-07-21 11:38:59

SQL Server重

2010-07-26 14:58:26

SQL Server刪

2010-07-26 09:55:55

SQL Server重

2010-08-05 09:07:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)