Jeśli nie udało Ci się wstawić nowego rekordu do tabeli z powodu ograniczenia unikalności, nie przegap tego artykułu. Pomoże ci to rozwiązać ten problem.
W tym artykule przedstawimy 4 metody rozwiązania problemu, gdy nie uda się wstawić nowego rekordu, ponieważ narusza on unikalne ograniczenie tabeli w SQL Server.
Prawdziwy przypadek:
Teraz zobaczmy prawdziwy przypadek. Mamy bazę danych o nazwie „Produkt” oraz tabelę o nazwie „DataNumenProdukt ”w bazie danych. W tabeli znajdują się dwa pola, tj. „ProductId” i „ProductName”, z typami danych odpowiednio „int” i „varchar”. „ProductId” to klucz podstawowy z unikalnymi ograniczeniami.
Obecnie w tabeli znajduje się kilka rekordów, jak poniżej:
Rysunek 1 Rekordy w tabeli ”DataNumenProdukt"
Zakładając, że baza danych obsługuje dwóch administratorów baz danych, tj. Jim i Tom. Pewnego dnia Jim usunął pierwszy rekord z tabeli, jak poniżej:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Drugiego dnia Tomek wstawił nowy rekord do tabeli, który ma ten sam klucz podstawowy z usuniętym rekordem, jak poniżej:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Więc nasza tabela ma następujące rekordy, jak poniżej:
Rysunek 2 Zaktualizowane rekordy w tabeli ”DataNumenProdukty ”
Teraz, jeśli Jim chce przywrócić usunięty rekord z powrotem do tabeli, naruszy to unikalne ograniczenie klucza podstawowego „ProductId”. W takim przypadku możemy skorzystać z jednego z poniższych obejść, aby rozwiązać problem.
Obejście 1: Zmodyfikuj klucz podstawowy nowego rekordu, aby zapobiec konfliktom
Możemy zmodyfikować klucz podstawowy rekordu, który ma zostać wstawiony, do nowej wartości, która różni się od wszystkich istniejących rekordów w tabeli. Weź powyższy przypadek jako przykład, aby wstawić rekord, możemy zmodyfikować wartość klucza podstawowego od 1 do 5. Następnie możemy przywrócić nowy wygenerowany rekord z powrotem do tabeli, jak poniżej:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Poniżej znajdują się końcowe rekordy w tabeli:
Rysunek 3 Końcowe rekordy w tabeli ”DataNumen Produkty ”
Obejście 2: Zmodyfikuj klucz podstawowy istniejącego rekordu, aby zapobiec konfliktom
- Najpierw musimy zaktualizować wartość klucza podstawowego istniejącego rekordu, co może powodować konflikt, jak poniżej:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Poniżej znajdują się zaktualizowane rekordy w tabeli:
Rysunek 4 Zaktualizowane rekordy w tabeli ”DataNumen Produkty ”
- Następnie możemy przywrócić usunięty rekord z powrotem do tabeli, jak poniżej:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Teraz zobaczmy ostateczną wersję, jak poniżej:
Rysunek 5 Końcowe rekordy w tabeli ”DataNumen Produkty ”
Rozwiązanie 3: Tymczasowe wyłączenie ograniczenia unikalności za pomocą SQL
- Aby rozwiązać ten problem, możemy tymczasowo usunąć ograniczenie klucza podstawowego „pk” w tabeli, jak poniżej:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Następnie możemy dodać z powrotem usunięty rekord do tabeli, jak poniżej:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Teraz zobaczmy rekordy w tabeli:
Rysunek 6 Zaktualizowane rekordy w tabeli ”DataNumen Produkty ”
- Następnie, ponieważ dwa rekordy mają te same wartości klucza podstawowego, musimy zmodyfikować jeden z nich, aby zapobiec konfliktom, jak poniżej:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Na koniec dodajemy z powrotem ograniczenie klucza podstawowego „pk” do tabeli, jak poniżej:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Teraz w tabeli jest kilka rekordów, jak poniżej:
Rysunek 7 Zaktualizowana zawartość w tabeli ”DataNumen Produkty ”
Rozwiązanie 4: Tymczasowo wyłącz ograniczenie unikalności za pomocą SQL Server Studio zarządzania:
- W pierwszej kolejności usuwamy ograniczenie klucza podstawowego „pk” w tabeli za pośrednictwem interfejsu GUI, jak poniżej:
Rysunek 8 Usuwanie podstawowego ograniczenia klucza „pk” za pomocą interfejsu GUI
- Następnie wstawiamy usunięty rekord w prawdziwym przypadku do tabeli, jak poniżej.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Teraz w tabeli jest kilka rekordów, jak poniżej:
Rysunek 9 Zaktualizowana zawartość w tabeli ”DataNumen Produkty ”
- Następnie modyfikujemy wartość klucza podstawowego istniejącego rekordu w tabeli, jak poniżej:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Na koniec dodajemy z powrotem ograniczenie klucza podstawowego „pk” do tabeli poprzez GUI, jak poniżej:
Rysunek 8 Dodaj z powrotem ograniczenie klucza podstawowego „pk” poprzez GUI
Rozwiązuje SQL Server Uszkodzenie bazy danych
Poza ograniczeniami Unique, SQL Server korupcja jest również bardzo częstym problemem irytującym administratorów baz danych. Zwykle możemy użyć SQL Server wbudowane polecenia do rozwiązywania problemów. Jeśli jednak nie zadziałają, możemy skorzystać z pomocy innej firmy SQL Server narzędzia do odzyskiwania danych.
Wprowadzenie autora:
Jim Hu jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym Dostęp do naprawy i dbf oprogramowanie do naprawy. po więcej informacji odwiedź www.datanumen.com








