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:
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:
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:
Figuur 3 Laatste records in de tabel “DataNumen Producten '
Tijdelijke oplossing 2: wijzig de primaire sleutel van het bestaande record om conflicten te voorkomen
- 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:
Figuur 4 Bijgewerkte records in tabel “DataNumen Producten '
- 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:
Figuur 5 Laatste records in tabel “DataNumen Producten '
Tijdelijke oplossing 3: Schakel het unieke beperkingstempo uitrareenvoudig via SQL
- Om het probleem op te lossen, kunnen we de primaire sleutelbeperking "pk" in het tabeltempo verwijderenrarily, zoals hieronder:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- 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:
Figuur 6 Bijgewerkte records in tabel “DataNumen Producten '
- 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';
- 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:
Figuur 7 Bijgewerkte inhoud in de tabel “DataNumen Producten '
Tijdelijke oplossing 4: Schakel het unieke beperkingstempo uitrariel via SQL Server Beheer Studio:
- In de eerste plaats verwijderen we de primaire sleutelbeperking "pk" in de tabel via GUI, zoals hieronder:
Figuur 8 Verwijder de Primary Key Constraint “pk” via GUI
- 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:
Figuur 9 Bijgewerkte inhoud in tabel “DataNumen Producten '
- 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';
- Ten slotte voegen we de primaire sleutelbeperking "pk" weer toe aan de tabel via GUI, zoals hieronder:
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









