Wenn Sie aufgrund der eindeutigen Einschränkung keinen neuen Datensatz in eine Tabelle einfügen konnten, sollten Sie diesen Artikel nicht verpassen. Es wird Ihnen helfen, dieses Problem zu lösen.
In diesem Artikel werden 4 Methoden zur Lösung des Problems vorgestellt, wenn Sie keinen neuen Datensatz einfügen können, da dies die eindeutige Einschränkung der Tabelle in verletzt SQL Server.
Ein echter Fall:
Nun sehen wir uns einen realen Fall an. Wir haben eine Datenbank mit dem Namen "Produkt" und es gibt eine Tabelle mit dem Namen "Produkt"DataNumenProdukt “in der Datenbank. Die Tabelle enthält zwei Felder, nämlich "ProductId" und "ProductName" mit den Datentypen "int" und "varchar". Und „ProductId“ ist ein Primärschlüssel mit eindeutigen Einschränkungen.
Derzeit enthält die folgende Tabelle einige Datensätze:
Abbildung 1 Datensätze in Tabelle “DataNumenProdukt"
Angenommen, es gibt zwei Datenbankadministratoren für die Datenbank, nämlich Jim und Tom. Eines Tages löschte Jim den ersten Datensatz in der Tabelle wie folgt:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Am zweiten Tag fügte Tom einen neuen Datensatz in die Tabelle ein, der denselben Primärschlüssel wie der gelöschte Datensatz hat, wie folgt:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Unsere Tabelle enthält also die folgenden Datensätze:
Abbildung 2 Aktualisierte Datensätze in Tabelle „DataNumenProdukte"
Wenn Jim nun den gelöschten Datensatz wieder in der Tabelle wiederherstellen möchte, verstößt dies gegen die eindeutige Einschränkung des Primärschlüssels "ProductId". In einem solchen Fall können wir eine der folgenden Problemumgehungen verwenden, um das Problem zu lösen.
Problemumgehung 1: Ändern Sie den Primärschlüssel des neuen Datensatzes, um Konflikte zu vermeiden
Wir können den Primärschlüssel des einzufügenden Datensatzes auf einen neuen Wert ändern, der sich von dem aller vorhandenen Datensätze in der Tabelle unterscheidet. Nehmen Sie den obigen Fall als Beispiel, damit der Datensatz eingefügt werden kann, können Sie den Primärschlüsselwert von 1 auf 5 ändern. Anschließend können Sie den neu generierten Datensatz wie folgt in der Tabelle wiederherstellen:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Nachfolgend sind die endgültigen Aufzeichnungen in der Tabelle aufgeführt:
Abbildung 3 Endgültige Aufzeichnungen in der Tabelle „DataNumen Produkte"
Problemumgehung 2: Ändern Sie den Primärschlüssel des vorhandenen Datensatzes, um Konflikte zu vermeiden
- Zunächst müssen wir den Primärschlüsselwert des vorhandenen Datensatzes aktualisieren, der zu Konflikten führen kann, wie folgt:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Unten finden Sie die aktualisierten Datensätze in der Tabelle:
Abbildung 4 Aktualisierte Datensätze in Tabelle „DataNumen Produkte"
- Dann können wir den gelöschten Datensatz wie folgt in der Tabelle wiederherstellen:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Nun sehen wir uns die endgültige Version wie folgt an:
Abbildung 5 Endgültige Aufzeichnungen in Tabelle „DataNumen Produkte"
Workaround 3: Deaktivieren der Unique-Constraints vorübergehend über SQL
- Um das Problem zu lösen, können wir die Primärschlüsselbeschränkung „pk“ in der Tabelle vorübergehend löschen, wie folgt:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Dann können wir den gelöschten Datensatz wie folgt zur Tabelle hinzufügen:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nun sehen wir uns die Datensätze in der Tabelle an:
Abbildung 6 Aktualisierte Datensätze in Tabelle „DataNumen Produkte"
- Da zwei Datensätze dieselben Primärschlüsselwerte haben, müssen wir einen davon wie folgt ändern, um Konflikte zu vermeiden:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Zuletzt fügen wir der Tabelle die Primärschlüsseleinschränkung "pk" wie folgt hinzu:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Nun gibt es einige Datensätze in der Tabelle, wie folgt:
Abbildung 7 Aktualisierter Inhalt in der Tabelle „DataNumen Produkte"
Workaround 4: Deaktivieren Sie die Unique-Constraint vorübergehend über SQL Server Managementstudio:
- Zunächst löschen wir die Primärschlüsseleinschränkung "pk" in der Tabelle über die GUI wie folgt:
Abbildung 8 Löschen Sie die Primärschlüsseleinschränkung „pk“ über die GUI
- Dann fügen wir den gelöschten Datensatz im realen Fall wie folgt in die Tabelle ein.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nun gibt es einige Datensätze in der Tabelle, wie folgt:
Abbildung 9 Aktualisierter Inhalt in Tabelle „DataNumen Produkte"
- Anschließend ändern wir den Primärschlüsselwert des vorhandenen Datensatzes in der Tabelle wie folgt:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Zuletzt fügen wir der Tabelle die Primärschlüsseleinschränkung "pk" über die GUI wie folgt hinzu:
Abbildung 8 Hinzufügen der Primärschlüsseleinschränkung „pk“ über die GUI
Löst SQL Server Datenbankkorruption
Andere als eindeutige Einschränkungen, SQL Server Korruption ist auch ein sehr häufiges Problem, das DBAs nervt. Normalerweise können wir verwenden SQL Server eingebaute Befehle zur Behebung der Beschädigungen. Wenn sie jedoch nicht funktionieren, können wir auf Dritte zurückgreifen SQL Server Tools zur Datenwiederherstellung.
Einführung des Autors:
Jim Hu ist ein Experte für Datenwiederherstellung in DataNumen, Inc., das weltweit führend bei Datenwiederherstellungstechnologien ist, einschließlich Zugangsreparatur und dbf Reparatur von Softwareprodukten. Für weitere Informationen besuchen Sie www.datanumen.com €XNUMX








