4 zaobilazna rješenja kada vas jedinstveno ograničenje sprječava u umetanju novog zapisa SQL Server

Podijeli sada:

Ako niste uspjeli umetnuti novi zapis u tablicu zbog jedinstvenog ograničenja, nemojte propustiti pročitati ovaj članak. Pomoći će vam da riješite ovaj problem.

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

Pravi slučaj:

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

Trenutačno postoje neki zapisi u tablici, kao u nastavku:Zapisi u tablici “DataNumenProizvod"

Slika 1 Zapisi u tablici "DataNumenProizvod"

Pod pretpostavkom da postoje dva DBA za bazu podataka, tj. Jim i Tom. Jednog dana Jim je izbrisao prvi zapis u tablici, kao što je prikazano u nastavku:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Drugog dana, Tom je u tablicu umetnuo novi zapis koji ima isti primarni ključ kao i izbrisani zapis, kao u nastavku:

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

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

Ažurirani zapisi u tablici "DataNumenProizvodi”

Slika 2 Ažurirani zapisi u tablici "DataNumenProizvodi”

Sada, ako Jim želi vratiti izbrisani zapis natrag u tablicu, to će prekršiti jedinstveno ograničenje primarnog ključa "ProductId". U tom slučaju možemo upotrijebiti jedno od rješenja u nastavku za rješavanje problema.

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

Možemo modificirati primarni ključ zapisa koji treba umetnuti u novu vrijednost koja se razlikuje od onih svih postojećih zapisa u tablici. Uzmimo gornji slučaj kao primjer, za zapis koji treba umetnuti, možemo promijeniti vrijednost primarnog ključa od 1 do 5. Zatim možemo vratiti novi generirani zapis natrag u tablicu, kao u nastavku:

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

Ispod su konačni zapisi u tablici:Konačni zapisi u tablici “DataNumen Proizvodi”

Slika 3 Konačni zapisi u tablici “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 što može uzrokovati sukob, kao što je navedeno u nastavku:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Ispod su ažurirani zapisi u tablici:

Ažurirani zapisi u tablici "DataNumen Proizvodi”

Slika 4 Ažurirani zapisi u tablici "DataNumen Proizvodi”

  1. Tada možemo vratiti izbrisani zapis natrag u tablicu, kao u nastavku:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Pogledajmo sada konačnu verziju, kao u nastavku:

Konačni zapisi u tablici “DataNumen Proizvodi”

Slika 5 Konačni zapisi u tablici "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 tablici, kao što je prikazano u nastavku:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Tada možemo vratiti izbrisani zapis u tablicu, kao u nastavku:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Pogledajmo sada zapise u tablici:

Ažurirani zapisi u tablici "DataNumen Proizvodi”

Slika 6 Ažurirani zapisi u tablici "DataNumen Proizvodi”

  1. Zatim, budući da dva zapisa imaju iste vrijednosti primarnog ključa, moramo modificirati jedan od njih kako bismo spriječili sukob, kao u nastavku:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Na kraju, vraćamo ograničenje primarnog ključa "pk" u tablicu, kao u nastavku:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Sada postoje neki zapisi u tablici, kao u nastavku:

Ažurirani sadržaj u tablici "DataNumen Proizvodi”

Slika 7 Ažurirani sadržaj u tablici "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 tablici putem GUI-ja, kao u nastavku:

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

Slika 8 Izbrišite ograničenje primarnog ključa "pk" putem GUI-ja

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

Sada postoje neki zapisi u tablici, kao u nastavku:

Ažurirani sadržaj u tablici "DataNumen Proizvodi”

Slika 9 Ažurirani sadržaj u tablici "DataNumen Proizvodi”

  1. Zatim mijenjamo vrijednost primarnog ključa postojećeg zapisa u tablici, kao u nastavku:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Na kraju, vraćamo ograničenje primarnog ključa "pk" u tablicu putem GUI-ja, kao u nastavku:Vratite ograničenje primarnog ključa "pk" putem GUI-ja

Slika 8 Vratite ograničenje primarnog ključa "pk" putem GUI-ja

Riješiti SQL Server Oštećenje baze podataka

Osim jedinstvenih ograničenja, SQL Server korupcija također je vrlo čest problem koji smeta administratorima baze podataka. Obično možemo koristiti SQL Server ugrađene naredbe za rješavanje oštećenja. Međutim, ako ne rade, možemo se obratiti nekoj trećoj strani SQL Server alati za oporavak podataka.

Uvod za autora:

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

Podijeli sada:

Komentari su zatvoreni.