4 løsninger når Unique Constraint hindrer deg i å sette inn en ny post SQL Server

Hvis du ikke klarte å sette inn en ny post i en tabell på grunn av den unike begrensningen, ikke gå glipp av å lese denne artikkelen. Det vil hjelpe deg å løse dette problemet.

I denne artikkelen vil vi introdusere 4 metoder for å løse problemet når du ikke klarer å sette inn en ny post fordi den bryter med den unike begrensningen til tabellen i SQL Server.

En ekte sak:

La oss nå se en reell sak. Vi har en database som heter "Produkt", og det er en tabell som heter "DataNumenProdukt” i databasen. Det er to felt i tabellen, dvs. "ProductId" og "ProductName", med datatyper av henholdsvis "int" og "varchar". Og "ProductId" er en primærnøkkel med unik begrensning.

For øyeblikket er det noen poster i tabellen, som nedenfor:Opptegnelser i tabell "DataNumenProdukt"

Figur 1 Oppføringer i tabell "DataNumenProdukt"

Forutsatt at det er to DBAer for databasen, dvs. Jim og Tom. En dag slettet Jim den første posten i tabellen, som nedenfor:

SLETT FRA DataNumenProduct WHERE ProductId=1;

Den andre dagen la Tom inn en ny post i tabellen, som har samme primærnøkkel som den slettede posten, som nedenfor:

INSERT I DataNumenProduktverdier(1,'DataNumen OutLook Repair');

Så tabellen vår har følgende poster, som nedenfor:

Oppdaterte poster i tabell "DataNumenProdukter"

Figur 2 Oppdaterte poster i tabell "DataNumenProdukter"

Hvis Jim nå ønsker å gjenopprette den slettede posten tilbake til tabellen, vil det bryte med den unike begrensningen til primærnøkkelen "ProductId". I et slikt tilfelle kan vi bruke en av løsningene nedenfor for å løse problemet.

Løsning 1: Endre primærnøkkelen til den nye posten for å forhindre konflikt

Vi kan endre primærnøkkelen til posten som skal settes inn til en ny verdi som er forskjellig fra alle eksisterende poster i tabellen. Ta tilfellet ovenfor som et eksempel, for at posten skal settes inn, kan vi endre primærnøkkelverdien fra 1 til 5. Deretter kan vi gjenopprette den nye genererte posten tilbake til tabellen, som nedenfor:

INSERT I DataNumenProduktVERDIER(5, 'DataNumen Access Repair');

Nedenfor er de endelige postene i tabellen:Endelige rekorder i tabellen "DataNumen Produkter"

Figur 3 Endelige poster i tabellen "DataNumen Produkter"

Løsning 2: Endre primærnøkkelen til den eksisterende posten for å forhindre konflikt

  1. Først må vi oppdatere primærnøkkelverdien til den eksisterende posten som kan forårsake konflikt, som nedenfor:
OPPDATERING DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;

Nedenfor er de oppdaterte postene i tabellen:

Oppdaterte poster i tabell "DataNumen Produkter"

Figur 4 Oppdaterte poster i tabell "DataNumen Produkter"

  1. Deretter kan vi gjenopprette den slettede posten tilbake til tabellen, som nedenfor:
INSERT I DataNumenProduktverdier(1, 'DataNumen Access Repair ');

La oss nå se den endelige versjonen, som nedenfor:

Endelige rekorder i tabell "DataNumen Produkter"

Figur 5 Endelige poster i tabell "DataNumen Produkter"

Løsning 3: Deaktiver Unique Constraint Temporarily via SQL

  1. For å løse problemet kan vi slette primærnøkkelbegrensningen "pk" i tabelltempoetrarily, som nedenfor:
ALTER TABLE DataNumenProdukt DROPPEBEGRENSNING pk;
  1. Deretter kan vi legge tilbake den slettede posten til tabellen, som nedenfor:
INSERT I DataNumenProduktverdier(1, 'DataNumen Access Repair');

La oss nå se postene i tabellen:

Oppdaterte poster i tabell "DataNumen Produkter"

Figur 6 Oppdaterte poster i tabell "DataNumen Produkter"

  1. Siden to poster har de samme primærnøkkelverdiene, må vi endre en av dem for å forhindre konflikt, som nedenfor:
OPPDATERING DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
  1. Til slutt legger vi tilbake primærnøkkelbegrensningen "pk" til tabellen, som nedenfor:
ALTER TABLE DataNumenProdukt ADD CONSTRAINT pk PRIMÆR NØKKEL(ProductId);

Nå er det noen poster i tabellen, som nedenfor:

Oppdatert innhold i tabellen "DataNumen Produkter"

Figur 7 Oppdatert innhold i tabellen "DataNumen Produkter"

Løsning 4: Deaktiver Unique Constraint Temporarily via SQL Server Management Studio:

  1. For det første sletter vi primærnøkkelbegrensningen "pk" i tabellen via GUI, som nedenfor:

Slett primærnøkkelbegrensningen "pk" via GUI

Figur 8 Slett primærnøkkelbegrensningen "pk" via GUI

  1. Deretter setter vi inn den slettede posten i virkelige tilfeller i tabellen, som nedenfor.
INSERT I DataNumenProduktverdier(1, 'DataNumen Access Repair');

Nå er det noen poster i tabellen, som nedenfor:

Oppdatert innhold i tabell "DataNumen Produkter"

Figur 9 Oppdatert innhold i tabell "DataNumen Produkter"

  1. Deretter endrer vi primærnøkkelverdien til eksisterende post i tabellen, som nedenfor:
OPPDATERING DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
  1. Til slutt legger vi tilbake primærnøkkelbegrensningen "pk" til tabellen via GUI, som nedenfor:Legg tilbake den primære nøkkelbegrensningen "pk" via GUI

Figur 8 Legg til tilbake den primære nøkkelbegrensningen "pk" via GUI

Løs SQL Server Databasekorrupsjon

Annet enn unike begrensninger, SQL Server korrupsjon er også et veldig vanlig problem irriterende DBAer. Normalt kan vi bruke SQL Server innebygde kommandoer for å løse korrupsjonene. Men hvis de ikke fungerer, kan vi ty til en tredjepart SQL Server datagjenopprettingsverktøy.

Forfatterintroduksjon:

Jim Hu er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert Tilgang reparasjon og dbf reparere programvareprodukter. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.