本文主要介紹sql server刪除重復(fù)數(shù)據(jù)(sql刪除重復(fù)記錄),下面一起看看sql server刪除重復(fù)數(shù)據(jù)(sql刪除重復(fù)記錄)相關(guān)資訊。
microsoft sql server表不應(yīng)包含重復(fù)和非唯一的主鍵。為簡(jiǎn)單起見,本文中我們有時(shí)稱其為主鍵作為key或pk,但這始終代表主鍵。重復(fù)pk違背了實(shí)體完整性,而不是允許關(guān)系型system.sql server中的各種強(qiáng)制實(shí)體完整性,包括索引、唯一約束、主鍵約束和觸發(fā)器。然而,在某些情況下可能會(huì)出現(xiàn)重復(fù)的主鍵;如果發(fā)生這種情況,必須清除重復(fù)的主鍵。出現(xiàn)重復(fù)主鍵的情況是,在導(dǎo)入sql server pk copy和pk unique中的非關(guān)系數(shù)據(jù)時(shí),不會(huì)執(zhí)行這些數(shù)據(jù)。重復(fù)主鍵的另一種情況是數(shù)據(jù)庫(kù)設(shè)計(jì)錯(cuò)誤,例如沒有執(zhí)行每個(gè)表的實(shí)體完整性。通常,當(dāng)您嘗試創(chuàng)建唯一索引時(shí),您會(huì)發(fā)現(xiàn)一個(gè)重復(fù)的pk,因?yàn)槿绻l(fā)現(xiàn)一個(gè)重復(fù)的鍵,您將停止創(chuàng)建唯一索引并顯示以下消息。消息1505,級(jí)別16,狀態(tài)1在重復(fù)索引上創(chuàng)建唯一索引中止。如果您使用sql server 2000或sql server 2005,您將收到以下錯(cuò)誤消息:msg 1505,級(jí)別16,狀態(tài)1唯一索引的創(chuàng)建因重復(fù)鍵(也稱為tan)而終止,以及。本文討論了如何查找和刪除表中的重復(fù)主鍵,但是重復(fù)鍵的過程要仔細(xì)檢查,避免重復(fù)。更多信息在本例中,我們將使用下表,該表有一個(gè)重復(fù)的pk值。該表中的主鍵(列1和列2)。我們可以 t創(chuàng)建唯一索引或主鍵約束,因?yàn)檫@兩行重復(fù)pk。此過程演示了如何識(shí)別和刪除重復(fù)的主鍵。復(fù)制代碼如下:create table t1(col2 int,int col2,col3 char(50)) insert t1 value (1,1,數(shù)據(jù)值)insert t1 value (1,1,數(shù)據(jù)值)insert t1 value (1,2,數(shù)據(jù)值2)。第一步是確定哪些行有重復(fù)的主鍵值:復(fù)制代碼如下:select col1。該結(jié)果的最后一列是特定pk值的重復(fù)次數(shù)。2col2112如果只有幾組重復(fù)的pk值,最好的辦法是手工逐個(gè)刪除:復(fù)制代碼如下:設(shè)置行數(shù)1從t1開始刪除給定關(guān)鍵字值的重復(fù)次數(shù)其中2 = 1和col2 = 1的行值要從1中減去。在這個(gè)例子中,有兩個(gè)重復(fù)的主鍵,所以行數(shù)被設(shè)置為1,2/col 2,這來自于對(duì)上述組的性能的查詢。如果該查詢返回多個(gè)行組,設(shè)置行查詢將在。每運(yùn)行一次查詢,設(shè)置特定pk值的行數(shù)就會(huì)減少1。在刪除一行之前,您應(yīng)該確認(rèn)整行都是重復(fù)的。雖然不能全行重復(fù),但是pk值可以重復(fù),全行不重復(fù)。例如,id號(hào)表的主鍵有兩個(gè)不同的人在同一個(gè)號(hào)碼(行)中,但每個(gè)人都有唯一的屬性。在這種情況下,任何導(dǎo)致重復(fù)的關(guān)鍵問題也可能導(dǎo)致該行的有效和唯一數(shù)據(jù)。在刪除數(shù)據(jù)之前,應(yīng)復(fù)制并保存數(shù)據(jù),以供研究和適當(dāng)調(diào)整。如果表中有多組完全不同的pk值,需要逐個(gè)刪除。在這種情況下,可以采用以下方法:1。首先,通過一個(gè)查詢運(yùn)行上述組,以確定pk值和每組中的重復(fù)次數(shù)。2。在臨時(shí)表中選擇重復(fù)的鍵值:復(fù)制代碼如下:select col1,col2,col3 = number (*)在hutchison t1 group col1,col2 count (*) 1 3。在臨時(shí)表中選擇重復(fù)行,消除過程中的重復(fù):復(fù)制代碼如下:從t1中選擇不同的t1 *到holddups,t1.col1 = holdkey.col1和t1.col2 = holdkey.col2 4中的hutchison,此時(shí),holddups表應(yīng)該有唯一的pk;但是,如果t1有重復(fù)的唯一pk和行,如上面的ssn示例所示,則情況并非如此。如果不存在關(guān)鍵字重復(fù)和唯一性,請(qǐng)驗(yàn)證holddups中的關(guān)鍵字是否唯一。如果是這樣,您必須停下來,并確保您想要保留給定重復(fù)鍵值的行。例如下面的查詢:copy code代碼如下:select col1,col2,count (*)從holddups組col1,col2每一行都要返回1。如果結(jié)果為1,請(qǐng)執(zhí)行下面的步驟5。如果不是1,這就是唯一的情況。關(guān)鍵是重復(fù)。您需要決定要保存哪一行。通常,這將需要放棄一行或創(chuàng)建一個(gè)新的唯一鍵值行。其中一個(gè)步驟是在holddups表中重復(fù)pk。5。刪除原表中重復(fù)的行:復(fù)制代碼如下:從t1中刪除t1,記錄在t1.col1 = holdkey.col1和t1.col2 = holdkey.col2 6中。將唯一一行返回到原始表:插入t1并從holddups中選擇*。
了解更多sql server刪除重復(fù)數(shù)據(jù)(sql刪除重復(fù)記錄)相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。