Om du misslyckades med att infoga en ny post i en tabell på grund av den unika begränsningen, missa inte att läsa den här artikeln. Det hjälper dig att lösa detta problem.
I den här artikeln kommer vi att introducera fyra metoder för att lösa problemet när du misslyckas med att infoga en ny post eftersom den bryter mot den unika begränsningen i tabellen i SQL Server.
Ett riktigt fall:
Låt oss nu se ett verkligt fall. Vi har en databas med namnet "Produkt" och det finns en tabell som heter "DataNumenProdukt ”i databasen. Det finns två fält i tabellen, dvs ”ProductId” och ”ProductName”, med datatyper ”int” respektive ”varchar”. Och ”ProductId” är en primär nyckel med unik begränsning.
För närvarande finns det några poster i tabellen, enligt nedan:
Figur 1 Register i tabell “DataNumenProdukt"
Förutsatt att det finns två DBA: er för databasen, det vill säga Jim och Tom. En dag raderade Jim den första posten i tabellen, enligt nedan:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Den andra dagen infogade Tom en ny post i tabellen, som har samma primära nyckel som den raderade posten, enligt nedan:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Så vår tabell har följande poster, som nedan:
Figur 2 Uppdaterade poster i tabell “DataNumenProdukter"
Om Jim nu vill återställa den raderade posten till tabellen kommer den att bryta mot den unika begränsningen för primärnyckeln "ProductId". I ett sådant fall kan vi använda någon av lösningarna nedan för att lösa problemet.
Lösning 1: Ändra den primära nyckeln till den nya posten för att förhindra konflikt
Vi kan ändra den primära nyckeln till posten som ska infogas till ett nytt värde som skiljer sig från de för alla befintliga poster i tabellen. Ta ovanstående fall som ett exempel, för att posten ska infogas kan vi ändra det primära nyckelvärdet från 1 till 5. Sedan kan vi återställa den nya genererade posten tillbaka till tabellen, enligt nedan:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Nedan följer de slutgiltiga posterna i tabellen:
Figur 3 Slutliga poster i tabellen “DataNumen Produkter"
Lösning 2: Ändra den primära nyckeln till den befintliga posten för att förhindra konflikt
- Först måste vi uppdatera det primära nyckelvärdet för den befintliga posten som kan orsaka konflikt, enligt nedan:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Nedan följer de uppdaterade posterna i tabellen:
Figur 4 Uppdaterade poster i tabell “DataNumen Produkter"
- Sedan kan vi återställa den raderade posten till tabellen, enligt nedan:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Låt oss nu se den slutliga versionen, som nedan:
Figur 5 Slutliga poster i tabell “DataNumen Produkter"
Lösning 3: Inaktivera den unika begränsningen tillfälligt via SQL
- För att lösa problemet kan vi tillfälligt ta bort primärnyckelbegränsningen "pk" i tabellen, enligt nedan:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Sedan kan vi lägga tillbaka den raderade posten till tabellen, enligt nedan:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Låt oss nu se posterna i tabellen:
Figur 6 Uppdaterade poster i tabell “DataNumen Produkter"
- Sedan eftersom två poster har samma primära nyckelvärden, måste vi ändra en av dem för att förhindra konflikt, enligt nedan:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Äntligen lägger vi tillbaka den primära nyckelbegränsningen "pk" till tabellen, enligt nedan:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Nu finns det några poster i tabellen, som nedan:
Figur 7 Uppdaterat innehåll i tabellen “DataNumen Produkter"
Lösning 4: Inaktivera den unika begränsningen tillfälligt via SQL Server Management Studio:
- För det första tar vi bort den primära nyckelbegränsningen "pk" i tabellen via GUI, enligt nedan:
Figur 8 Ta bort den primära nyckelbegränsningen “pk” via GUI
- Sedan infogar vi den raderade posten i verkliga fall i tabellen, enligt nedan.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nu finns det några poster i tabellen, som nedan:
Figur 9 Uppdaterat innehåll i tabell “DataNumen Produkter"
- Sedan ändrar vi det primära nyckelvärdet för befintlig post i tabellen, enligt nedan:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Äntligen lägger vi tillbaka den primära nyckelbegränsningen "pk" till tabellen via GUI, enligt nedan:
Figur 8 Lägg tillbaka den primära nyckelbegränsningen “pk” via GUI
Lös SQL Server Databaskorruption
Andra än unika begränsningar, SQL Server korruption är också ett mycket vanligt problem som irriterar DBA. Normalt kan vi använda SQL Server inbyggda kommandon för att lösa korruptionen. Men om de inte fungerar, kan vi tillgripa någon tredje part SQL Server verktyg för dataåterställning.
Författarintroduktion:
Jim Hu är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive Åtkomst reparation och dbf reparera programvaruprodukter. För mer information besök www.datanumen.com








