4 rješenja kada vas jedinstveno ograničenje sprječava da umetnete novi zapis SQL Server

Podijeli sada:

Ako niste uspjeli da umetnete novi zapis u tabelu zbog jedinstvenog ograničenja, ne propustite pročitati ovaj članak. To će vam pomoći da riješite ovaj problem.

U ovom članku ćemo predstaviti 4 metode za rješavanje problema kada ne uspijete umetnuti novi zapis jer krši jedinstveno ograničenje tablice u SQL Server.

Pravi slučaj:

Sada da vidimo pravi slučaj. Imamo bazu podataka pod nazivom “Proizvod” i postoji tabela pod nazivom “DataNumenProizvod” u bazi podataka. Postoje dva polja u tabeli, tj. “ProductId” i “ProductName”, sa tipovima podataka “int” i “varchar” respektivno. A “ProductId” je primarni ključ sa jedinstvenim ograničenjem.

Trenutno postoje neki zapisi u tabeli, kao u nastavku:Zapisi u tabeli “DataNumenProizvod”

Slika 1 Zapisi u tabeli “DataNumenProizvod”

Pod pretpostavkom da postoje dva DBA-a za bazu podataka, tj. Jim i Tom. Jednog dana, Jim je obrisao prvi zapis u tabeli, kao u nastavku:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Drugog dana, Tom je u tabelu ubacio novi zapis, koji ima isti primarni ključ sa izbrisanim zapisom, kao u nastavku:

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

Dakle, naša tabela ima sljedeće zapise, kao u nastavku:

Ažurirani zapisi u tabeli “DataNumenproizvodi”

Slika 2 Ažurirani zapisi u tabeli “DataNumenproizvodi”

Sada, ako Jim želi vratiti izbrisani zapis natrag u tabelu, to će prekršiti jedinstveno ograničenje primarnog ključa “ProductId”. U takvom slučaju, možemo koristiti jedno od zaobilaznih rješenja u nastavku da riješimo problem.

Zaobilazno rješenje 1: Izmijenite primarni ključ novog zapisa kako biste spriječili sukob

Možemo izmijeniti primarni ključ zapisa koji se ubacuje u novu vrijednost koja se razlikuje od onih svih postojećih zapisa u tabeli. Uzmite gornji slučaj kao primjer, da bi zapis bio umetnut, možemo izmijeniti vrijednost primarnog ključa sa 1 na 5. Zatim možemo vratiti novi generirani zapis natrag u tabelu, kao u nastavku:

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

Ispod su konačni rekordi u tabeli:Konačni rekordi na tabeli”DataNumen proizvodi”

Slika 3 Konačni zapisi u tabeli “DataNumen proizvodi”

Zaobilazno rješenje 2: Izmijenite primarni ključ postojećeg zapisa kako biste spriječili sukob

  1. Prvo, moramo ažurirati vrijednost primarnog ključa postojećeg zapisa koji može uzrokovati konflikt, kao u nastavku:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Ispod su ažurirani zapisi u tabeli:

Ažurirani zapisi u tabeli “DataNumen proizvodi”

Slika 4 Ažurirani zapisi u tabeli “DataNumen proizvodi”

  1. Tada možemo vratiti izbrisani zapis nazad u tabelu, kao što je dolje:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Sada da vidimo konačnu verziju, kao u nastavku:

Konačni rekordi u tabeli “DataNumen proizvodi”

Slika 5 Konačni zapisi u tabeli “DataNumen proizvodi”

Zaobilazno rješenje 3: Privremeno onemogućite jedinstveno ograničenje putem SQL-a

  1. Da bismo riješili problem, možemo privremeno izbrisati ograničenje primarnog ključa "pk" u tabeli, kao što je prikazano u nastavku:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Zatim možemo ponovo dodati izbrisani zapis u tabelu, kao u nastavku:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Pogledajmo sada zapise u tabeli:

Ažurirani zapisi u tabeli “DataNumen proizvodi”

Slika 6 Ažurirani zapisi u tabeli “DataNumen proizvodi”

  1. Zatim pošto dva zapisa imaju iste vrijednosti primarnog ključa, moramo modificirati jedan od njih kako bismo spriječili sukob, kao što je dolje:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Konačno, dodajemo ograničenje primarnog ključa “pk” u tabelu, kao što je dolje:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Sada postoje neki zapisi u tabeli, kao u nastavku:

Ažurirani sadržaj u tabeli “DataNumen proizvodi”

Slika 7 Ažurirani sadržaj u tabeli “DataNumen proizvodi”

Zaobilazno rješenje 4: Privremeno onemogućite jedinstveno ograničenje putem SQL Server Management Studio:

  1. Kao prvo, brišemo ograničenje primarnog ključa “pk” u tabeli preko GUI-a, kao u nastavku:

Izbrišite ograničenje primarnog ključa “pk” putem GUI-ja

Slika 8. Brisanje ograničenja primarnog ključa “pk” putem GUI

  1. Zatim unosimo izbrisani zapis u stvarnom slučaju u tabelu, kao u nastavku.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Sada postoje neki zapisi u tabeli, kao u nastavku:

Ažurirani sadržaj u tabeli “DataNumen proizvodi”

Slika 9 Ažurirani sadržaj u tabeli “DataNumen proizvodi”

  1. Zatim mijenjamo vrijednost primarnog ključa postojećeg zapisa u tabeli, kao u nastavku:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Konačno, dodajemo nazad ograničenje primarnog ključa “pk” u tablicu preko GUI-a, kao što je dolje:Dodajte natrag ograničenje primarnog ključa “pk” preko GUI

Slika 8 Dodajte natrag ograničenje primarnog ključa “pk” preko GUI

Rešite SQL Server Korupcija u bazi podataka

Osim jedinstvenih ograničenja, SQL Server korupcija je također vrlo čest problem koji nervira DBA. Obično možemo koristiti SQL Server ugrađene komande za rješavanje problema. Međutim, ako ne rade, onda možemo pribjeći nekom trećem licu SQL Server alati za oporavak podataka.

Uvod za autora:

Jim Hu je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući Popravka pristupa i dbf popravak softverskih proizvoda. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.