Če vam ni uspelo vstaviti novega zapisa v tabelo zaradi edinstvene omejitve, ne zamudite prebrati tega članka. To vam bo pomagalo rešiti ta problem.
V tem članku bomo predstavili 4 metode za rešitev težave, ko ne uspete vstaviti novega zapisa, ker krši edinstveno omejitev tabele v SQL Server.
Resničen primer:
Zdaj pa poglejmo resničen primer. Imamo bazo podatkov z imenom »Izdelek« in tam je tabela z imenom »DataNumenIzdelek« v bazi podatkov. V tabeli sta dve polji, tj. »ProductId« in »ProductName«, s tipoma podatkov »int« oziroma »varchar«. In »ProductId« je primarni ključ z edinstveno omejitvijo.
Trenutno je v tabeli nekaj zapisov, kot je spodaj:
Slika 1 Zapisi v tabeli "DataNumenizdelek”
Ob predpostavki, da obstajata dva DBA za bazo podatkov, tj. Jim in Tom. Nekega dne je Jim izbrisal prvi zapis v tabeli, kot je prikazano spodaj:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Drugi dan je Tom v tabelo vstavil nov zapis, ki ima enak primarni ključ kot izbrisani zapis, kot je prikazano spodaj:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Torej ima naša tabela naslednje zapise, kot je prikazano spodaj:
Slika 2 Posodobljeni zapisi v tabeli "DataNumenIzdelki "
Zdaj, če želi Jim obnoviti izbrisani zapis nazaj v tabelo, bo to kršilo edinstveno omejitev primarnega ključa »ProductId«. V takem primeru lahko za rešitev težave uporabimo eno od spodnjih rešitev.
1. rešitev: spremenite primarni ključ novega zapisa, da preprečite spor
Primarni ključ zapisa, ki ga želimo vstaviti, lahko spremenimo v novo vrednost, ki se razlikuje od vrednosti vseh obstoječih zapisov v tabeli. Vzemimo zgornji primer kot primer, za zapis, ki ga bomo vstavili, lahko spremenimo vrednost primarnega ključa z 1 na 5. Nato lahko obnovimo novo ustvarjeni zapis nazaj v tabelo, kot je prikazano spodaj:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Spodaj so končni zapisi v tabeli:
Slika 3 Končni zapisi v tabeli “DataNumen Izdelki "
Rešitev 2: Spremenite primarni ključ obstoječega zapisa, da preprečite spor
- Najprej moramo posodobiti vrednost primarnega ključa obstoječega zapisa, ki lahko povzroči spor, kot je prikazano spodaj:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Spodaj so posodobljeni zapisi v tabeli:
Slika 4 Posodobljeni zapisi v tabeli "DataNumen Izdelki "
- Nato lahko obnovimo izbrisani zapis nazaj v tabelo, kot je prikazano spodaj:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Zdaj pa poglejmo končno različico, kot je spodaj:
Slika 5 Končni zapisi v tabeli "DataNumen Izdelki "
Rešitev 3: Začasno onemogočite enolično omejitev prek SQL-a
- Da bi rešili težavo, lahko začasno izbrišemo omejitev primarnega ključa »pk« v tabeli, kot je prikazano spodaj:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Nato lahko izbrisani zapis dodamo nazaj v tabelo, kot je prikazano spodaj:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Zdaj pa poglejmo zapise v tabeli:
Slika 6 Posodobljeni zapisi v tabeli "DataNumen Izdelki "
- Ker imata dva zapisa enake vrednosti primarnega ključa, moramo spremeniti enega od njiju, da preprečimo konflikt, kot je prikazano spodaj:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Končno dodamo nazaj omejitev primarnega ključa »pk« v tabelo, kot je prikazano spodaj:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Zdaj je v tabeli nekaj zapisov, kot je spodaj:
Slika 7 Posodobljena vsebina v tabeli "DataNumen Izdelki "
Rešitev 4: Začasno onemogočite enolično omejitev prek SQL Server Management Studio:
- Najprej izbrišemo omejitev primarnega ključa »pk« v tabeli prek GUI, kot je prikazano spodaj:
Slika 8 Izbrišite omejitev primarnega ključa »pk« prek GUI
- Nato izbrisani zapis v realnem primeru vstavimo v tabelo, kot je prikazano spodaj.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Zdaj je v tabeli nekaj zapisov, kot je spodaj:
Slika 9 Posodobljena vsebina v tabeli "DataNumen Izdelki "
- Nato spremenimo vrednost primarnega ključa obstoječega zapisa v tabeli, kot je prikazano spodaj:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Končno dodamo nazaj omejitev primarnega ključa »pk« v tabelo prek GUI, kot je prikazano spodaj:
Slika 8 Ponovno dodajte omejitev primarnega ključa »pk« prek GUI
Rešite SQL Server Korupcija baze podatkov
Razen edinstvenih omejitev, SQL Server korupcija je tudi zelo pogosta težava, ki moti administratorje baze podatkov. Običajno lahko uporabljamo SQL Server vgrajeni ukazi za reševanje poškodb. Če pa ne delujejo, se lahko zatečemo k tretji osebi SQL Server orodja za obnovitev podatkov.
Uvod avtorja:
Jim Hu je strokovnjak za obnovitev podatkov v DataNumen, Inc., ki je vodilna na svetu na področju tehnologij za obnovitev podatkov, vključno z Popravilo dostopa in dbf popravilo programskih izdelkov. Za več informacij obiščite www.datanumen.com








