Ja jums neizdevās ievietot jaunu ierakstu tabulā unikālā ierobežojuma dēļ, nepalaid garām šo rakstu. Tas jums palīdzēs atrisināt šo problēmu.
Šajā rakstā mēs ieviesīsim 4 metodes, kā atrisināt problēmu, kad neizdodas ievietot jaunu ierakstu, jo tas pārkāpj tabulas unikālo ierobežojumu SQL Server.
Īsts gadījums:
Tagad redzēsim reālu gadījumu. Mums ir datu bāze ar nosaukumu “Produkts”, un ir tabula ar nosaukumu “Produkts”.DataNumenProdukts ”datu bāzē. Tabulā ir divi lauki, ti, “ProductId” un “ProductName”, ar datu tipiem attiecīgi “int” un “varchar”. “ProductId” ir galvenā atslēga ar unikāliem ierobežojumiem.
Pašlaik tabulā ir daži ieraksti, kā norādīts zemāk:
1. attēls. Tabulas ieraksti “DataNumenProdukts ”
Pieņemot, ka datu bāzei ir divi DBA, ti, Džims un Toms. Kādu dienu Džims izdzēsa tabulas pirmo ierakstu šādi:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Otrajā dienā Toms ievietoja tabulā jaunu ierakstu, kuram ir tā pati galvenā atslēga ar izdzēsto ierakstu, kā norādīts zemāk:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Tātad mūsu tabulā ir šādi ieraksti, kā norādīts zemāk:
2. attēls. Atjauninātie ieraksti tabulā “DataNumenProdukti ”
Tagad, ja Džims vēlas atjaunot izdzēsto ierakstu tabulā, tas pārkāps primārās atslēgas “ProductId” unikālo ierobežojumu. Šādā gadījumā problēmas risināšanai mēs varam izmantot vienu no tālāk norādītajiem risinājumiem.
1. risinājums: modificējiet jaunā ieraksta primāro atslēgu, lai novērstu konfliktus
Mēs varam modificēt ievietojamā ieraksta primāro atslēgu uz jaunu vērtību, kas atšķiras no visu tabulā esošo ierakstu vērtības. Kā piemēru ņemiet iepriekš minēto gadījumu, lai ierakstu ievietotu, mēs varam mainīt primārās atslēgas vērtību no 1 līdz 5. Pēc tam mēs varam atjaunot jauno ģenerēto ierakstu tabulā, kā norādīts zemāk:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Zemāk ir tabulas pēdējie ieraksti:
3. attēls Galīgie ieraksti tabulā “DataNumen Produkti ”
2. risinājums: modificējiet esošā ieraksta primāro atslēgu, lai novērstu konfliktus
- Pirmkārt, mums jāatjaunina esošā ieraksta galvenā atslēgas vērtība, kas var izraisīt konfliktu, kā norādīts zemāk:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Zemāk ir atjauninātie tabulas ieraksti:
4. attēls. Atjauninātie ieraksti tabulā “DataNumen Produkti ”
- Tad mēs varam atjaunot izdzēsto ierakstu atpakaļ tabulā, kā norādīts zemāk:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Tagad redzēsim galīgo versiju, kā norādīts zemāk:
5. attēls Galīgie ieraksti tabulā “DataNumen Produkti ”
3. risinājums: īslaicīgi atspējojiet unikālo ierobežojumu, izmantojot SQL
- Lai atrisinātu problēmu, tabulā varam īslaicīgi izdzēst primārās atslēgas ierobežojumu “pk”, kā norādīts tālāk:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Tad mēs varam pievienot izdzēsto ierakstu tabulai, kā norādīts zemāk:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Tagad aplūkosim tabulas ierakstus:
6. attēls. Atjauninātie ieraksti tabulā “DataNumen Produkti ”
- Tā kā diviem ierakstiem ir vienādas primārās atslēgas vērtības, mums ir jāmaina viens no tiem, lai novērstu konfliktu, kā norādīts zemāk:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Visbeidzot, mēs tabulai pievienojam primārā atslēgas ierobežojumu “pk”, kā norādīts zemāk:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Tagad tabulā ir daži ieraksti, kā norādīts zemāk:
7. attēls. Atjauninātais saturs tabulā “DataNumen Produkti ”
4. risinājums: īslaicīgi atspējojiet unikālo ierobežojumu, izmantojot SQL Server Vadības studija:
- Pirmkārt, izmantojot GUI, tabulā mēs izdzēšam primārā atslēgas ierobežojumu “pk”, kā norādīts zemāk:
8. attēls, izmantojot GUI, izdzēsiet primārās atslēgas ierobežojumu “pk”
- Tad tabulā reālā gadījumā ievietojam izdzēsto ierakstu, kā parādīts zemāk.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Tagad tabulā ir daži ieraksti, kā norādīts zemāk:
9. attēls. Atjauninātais saturs tabulā “DataNumen Produkti ”
- Tad mēs modificējam tabulas esošā ieraksta primārās atslēgas vērtību, kā norādīts zemāk:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Visbeidzot, izmantojot GUI, tabulai pievienojam primārā atslēgas ierobežojumu “pk”, kā norādīts zemāk:
8. attēls Pievienojiet primārās atslēgas ierobežojumu “pk”, izmantojot GUI
Atrisināt SQL Server Datu bāzes korupcija
Izņemot unikālus ierobežojumus, SQL Server korupcija ir arī ļoti izplatīta problēma, kas kaitina DBA. Parasti mēs varam izmantot SQL Server iebūvētās komandas korupcijas novēršanai. Tomēr, ja tie nedarbojas, tad mēs varam izmantot kādu trešo personu SQL Server datu atkopšanas rīki.
Autora ievads:
Džims Hu ir datu atkopšanas eksperts DataNumen, Inc., kas ir pasaules līderis datu atkopšanas tehnoloģiju, tostarp Piekļuves remonts un dbf programmatūras produktu labošana. Lai iegūtu vairāk informācijas, apmeklējiet vietni www.datanumen. Ar








