4 løsninger, når unik begrænsning forhindrer dig i at indsætte en ny post i SQL Server

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:Optegnelser i tabel “DataNumenProdukt"

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:

Opdaterede poster i tabel “DataNumenProdukter"

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:Endelige poster i tabellen “DataNumen Produkter"

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

  1. 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:

Opdaterede poster i tabel “DataNumen Produkter"

Figur 4 Opdaterede poster i tabel “DataNumen Produkter"

  1. 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:

Endelige poster i tabel “DataNumen Produkter"

Figur 5 Endelige optegnelser i tabel “DataNumen Produkter"

Løsning 3: Deaktiver den unikke begrænsning midlertidigt via SQL

  1. 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;
  1. 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:

Opdaterede poster i tabel “DataNumen Produkter"

Figur 6 Opdaterede poster i tabel “DataNumen Produkter"

  1. 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';
  1. 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:

Opdateret indhold i tabellen “DataNumen Produkter"

Figur 7 Opdateret indhold i tabellen “DataNumen Produkter"

Løsning 4: Deaktiver den unikke begrænsning midlertidigt via SQL Server Management Studio:

  1. For det første sletter vi den primære nøglebegrænsning "pk" i tabellen via GUI som nedenfor:

Slet den primære nøglebegrænsning “pk” via GUI

Figur 8 Slet den primære nøglebegrænsning “pk” via GUI

  1. 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:

Opdateret indhold i tabel “DataNumen Produkter"

Figur 9 Opdateret indhold i tabel “DataNumen Produkter"

  1. 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';
  1. Endelig tilføjer vi den primære nøglebegrænsning "pk" til tabellen via GUI som nedenfor:Tilføj tilbage den primære nøglebegrænsning “pk” via GUI

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

Kommentarer er lukket.