4 oplossingen wanneer een unieke beperking voorkomt dat u een nieuw record invoegt in SQL Server

Als u vanwege de unieke beperking geen nieuw record in een tabel hebt ingevoegd, mag u dit artikel niet missen. Het zal u helpen om dit probleem op te lossen.

In dit artikel introduceren we 4 methoden om het probleem op te lossen wanneer u geen nieuw record invoegt omdat het de unieke beperking van de tabel in SQL Server.

Een echt geval:

Laten we nu eens kijken naar een echt geval. We hebben een database met de naam "Product" en er is een tabel met de naam "DataNumenProduct ”in de database. Er zijn twee velden in de tabel, namelijk "ProductId" en "ProductName", met de gegevenstypen "int" en "varchar" respectievelijk. En "ProductId" is een primaire sleutel met een unieke beperking.

Momenteel zijn er enkele records in de tabel, zoals hieronder:Records in tabel 'DataNumenProduct"

Figuur 1 Records in tabel “DataNumenProduct"

Ervan uitgaande dat er twee DBA's zijn voor de database, namelijk Jim en Tom. Op een dag verwijderde Jim het eerste record in de tabel, zoals hieronder:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Op de tweede dag voegde Tom een ​​nieuw record in de tabel in, die dezelfde primaire sleutel heeft als het verwijderde record, zoals hieronder:

INSERT INTO DataNumenProduct
VALUES(1,'DataNumen OutLook Repair');

Dus onze tafel heeft de volgende records, zoals hieronder:

Bijgewerkte records in tabel 'DataNumenProducten '

Figuur 2 Bijgewerkte records in tabel “DataNumenProducten '

Als Jim nu het verwijderde record terug naar de tabel wil terugzetten, zal het de unieke beperking van de primaire sleutel "ProductId" schenden. In dat geval kunnen we een van de onderstaande tijdelijke oplossingen gebruiken om het probleem op te lossen.

Tijdelijke oplossing 1: wijzig de primaire sleutel van het nieuwe record om conflicten te voorkomen

We kunnen de primaire sleutel van het in te voegen record wijzigen in een nieuwe waarde die verschilt van die van alle bestaande records in de tabel. Neem het bovenstaande geval als voorbeeld, voor het record dat moet worden ingevoegd, kunnen we de primaire sleutelwaarde wijzigen van 1 naar 5. Vervolgens kunnen we het nieuw gegenereerde record terugzetten naar de tabel, zoals hieronder:

INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');

Hieronder staan ​​de definitieve records in de tabel:Laatste records in de tabel "DataNumen Producten '

Figuur 3 Laatste records in de tabel “DataNumen Producten '

Tijdelijke oplossing 2: wijzig de primaire sleutel van het bestaande record om conflicten te voorkomen

  1. Eerst moeten we de primaire sleutelwaarde van het bestaande record bijwerken, wat een conflict kan veroorzaken, zoals hieronder:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Hieronder staan ​​de bijgewerkte records in de tabel:

Bijgewerkte records in tabel 'DataNumen Producten '

Figuur 4 Bijgewerkte records in tabel “DataNumen Producten '

  1. Vervolgens kunnen we het verwijderde record terugzetten naar de tabel, zoals hieronder:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Laten we nu de definitieve versie bekijken, zoals hieronder:

Laatste records in tabel “DataNumen Producten '

Figuur 5 Laatste records in tabel “DataNumen Producten '

Tijdelijke oplossing 3: Schakel het unieke beperkingstempo uitrareenvoudig via SQL

  1. Om het probleem op te lossen, kunnen we de primaire sleutelbeperking "pk" in het tabeltempo verwijderenrarily, zoals hieronder:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Vervolgens kunnen we het verwijderde record weer aan de tabel toevoegen, zoals hieronder:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Laten we nu de records in de tabel bekijken:

Bijgewerkte records in tabel 'DataNumen Producten '

Figuur 6 Bijgewerkte records in tabel “DataNumen Producten '

  1. Aangezien twee records dezelfde primaire sleutelwaarden hebben, moeten we een ervan wijzigen om conflicten te voorkomen, zoals hieronder:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Ten slotte voegen we de primaire sleutelbeperking "pk" weer toe aan de tabel, zoals hieronder:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Nu zijn er enkele records in de tabel, zoals hieronder:

Bijgewerkte inhoud in de tabel “DataNumen Producten '

Figuur 7 Bijgewerkte inhoud in de tabel “DataNumen Producten '

Tijdelijke oplossing 4: Schakel het unieke beperkingstempo uitrariel via SQL Server Beheer Studio:

  1. In de eerste plaats verwijderen we de primaire sleutelbeperking "pk" in de tabel via GUI, zoals hieronder:

Verwijder de primaire sleutelbeperking "pk" via GUI

Figuur 8 Verwijder de Primary Key Constraint “pk” via GUI

  1. Vervolgens voegen we het verwijderde record in het echte geval in de tabel in, zoals hieronder.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Nu zijn er enkele records in de tabel, zoals hieronder:

Bijgewerkte inhoud in tabel 'DataNumen Producten '

Figuur 9 Bijgewerkte inhoud in tabel “DataNumen Producten '

  1. Vervolgens wijzigen we de primaire sleutelwaarde van het bestaande record in de tabel, zoals hieronder:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Ten slotte voegen we de primaire sleutelbeperking "pk" weer toe aan de tabel via GUI, zoals hieronder:Voeg de primaire sleutelbeperking "pk" terug via GUI

Afbeelding 8 Voeg de primaire sleutelbeperking "pk" toe via GUI

Oplossen SQL Server Database corruptie

Anders dan unieke beperkingen, SQL Server corruptie is ook een veel voorkomend probleem van vervelende DBA's. Normaal gesproken kunnen we gebruiken SQL Server ingebouwde commando's om de beschadigingen op te lossen. Als ze echter niet werken, kunnen we een beroep doen op een derde partij SQL Server hulpprogramma's voor gegevensherstel.

Auteur Introductie:

Jim Hu is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder Toegang tot reparatie en dbf reparatie softwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.