Hvis du ikke kunne indsætte en ny post i en tabel på grund af den unikke begrænsning, gå ikke glip af at læse denne artikel. Det hjælper dig med at løse dette problem.
I denne artikel introducerer vi fire metoder til at løse problemet, når du ikke indsætter en ny post, fordi den overtræder den unikke begrænsning i tabellen i SQL Server.
En rigtig sag:
Lad os nu se en reel sag. Vi har en database med navnet "Produkt", og der er en tabel kaldet "DataNumenProdukt ”i databasen. Der er to felter i tabellen, dvs. "ProductId" og "ProductName" med datatyper henholdsvis "int" og "varchar". Og "ProductId" er en primær nøgle med unik begrænsning.
I øjeblikket er der nogle poster i tabellen, som nedenfor:
Figur 1 Optegnelser i tabel “DataNumenProdukt"
Forudsat at der er to DBA'er til databasen, dvs. Jim og Tom. En dag slettede Jim den første post i tabellen som nedenfor:
DELETE FROM DataNumenProduct WHERE ProductId=1;
På den anden dag indsatte Tom en ny post i tabellen, som har den samme primære nøgle med den slettede post, som nedenfor:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Så vores tabel har følgende poster, som nedenfor:
Figur 2 Opdaterede poster i tabel “DataNumenProdukter"
Hvis Jim nu vil gendanne den slettede post tilbage til tabellen, vil den krænke den unikke begrænsning af den primære nøgle "ProductId". I et sådant tilfælde kan vi bruge en af nedenstående løsninger til at løse problemet.
Løsning 1: Ændr den primære nøgle til den nye post for at forhindre konflikt
Vi kan ændre den primære nøgle til den post, der skal indsættes, til en ny værdi, der adskiller sig fra den for alle eksisterende poster i tabellen. Tag ovenstående tilfælde som et eksempel, for at posten skal indsættes, kan vi ændre den primære nøgleværdi fra 1 til 5. Derefter kan vi gendanne den nye genererede post tilbage til tabellen, som nedenfor:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Nedenfor er de endelige poster i tabellen:
Figur 3 Endelige optegnelser i tabellen “DataNumen Produkter"
Løsning 2: Rediger den primære nøgle til den eksisterende post for at forhindre konflikt
- Først skal vi opdatere den primære nøgleværdi af den eksisterende post, som kan forårsage konflikt, som nedenfor:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Nedenfor er de opdaterede poster i tabellen:
Figur 4 Opdaterede poster i tabel “DataNumen Produkter"
- Derefter kan vi gendanne den slettede post tilbage til tabellen som nedenfor:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Lad os nu se den endelige version som nedenfor:
Figur 5 Endelige optegnelser i tabel “DataNumen Produkter"
Løsning 3: Deaktiver den unikke begrænsning midlertidigt via SQL
- For at løse problemet kan vi midlertidigt slette den primære nøglebegrænsning "pk" i tabellen som vist nedenfor:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Derefter kan vi tilføje den slettede post tilbage til tabellen som nedenfor:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Lad os nu se optegnelserne i tabellen:
Figur 6 Opdaterede poster i tabel “DataNumen Produkter"
- Da to poster har de samme primære nøgleværdier, skal vi ændre en af dem for at forhindre konflikt som nedenfor:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Endelig tilføjer vi den primære nøglebegrænsning "pk" til tabellen som nedenfor:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Nu er der nogle poster i tabellen, som nedenfor:
Figur 7 Opdateret indhold i tabellen “DataNumen Produkter"
Løsning 4: Deaktiver den unikke begrænsning midlertidigt via SQL Server Management Studio:
- For det første sletter vi den primære nøglebegrænsning "pk" i tabellen via GUI som nedenfor:
Figur 8 Slet den primære nøglebegrænsning “pk” via GUI
- Derefter indsætter vi den slettede post i virkeligheden i tabellen som nedenfor.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nu er der nogle poster i tabellen, som nedenfor:
Figur 9 Opdateret indhold i tabel “DataNumen Produkter"
- Derefter ændrer vi den primære nøgleværdi af eksisterende post i tabellen som nedenfor:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Endelig tilføjer vi den primære nøglebegrænsning "pk" til tabellen via GUI som nedenfor:
Figur 8 Tilføj den primære nøglebegrænsning “pk” tilbage via GUI
Løs SQL Server Databasekorruption
Bortset fra unikke begrænsninger, SQL Server korruption er også et meget almindeligt problem, der irriterer DBA'er. Normalt kan vi bruge SQL Server indbyggede kommandoer til at løse korruptionen. Men hvis de ikke fungerer, kan vi ty til en tredjepart SQL Server værktøjer til datagendannelse.
Forfatter Introduktion:
Jim Hu er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder Adgangsreparation og dbf produkter til reparation af software. For mere information besøg www.datanumen.com








