Ha az egyedi megszorítás miatt nem sikerült új rekordot beszúrnia egy táblába, ne mulassza el elolvasni ezt a cikket. Ez segít megoldani ezt a problémát.
Ebben a cikkben 4 módszert mutatunk be a probléma megoldására, ha nem sikerül új rekordot beszúrni, mert az sérti a tábla egyedi megkötését SQL Server.
Valódi eset:
Most lássunk egy valós esetet. Van egy „Termék” nevű adatbázisunk és van egy „Termék” nevű táblázatunk.DataNumenTermék” az adatbázisban. A táblázatban két mező található, azaz „ProductId” és „ProductName”, „int” és „varchar” adattípusokkal. A „ProductId” pedig egy elsődleges kulcs egyedi megszorításokkal.
Jelenleg néhány rekord található a táblázatban, az alábbiak szerint:
1. ábra Rekordok a táblázatbanDataNumenTermék"
Feltéve, hogy az adatbázishoz két DBA tartozik, azaz Jim és Tom. Egy napon Jim törölte a táblázat első rekordját, az alábbiak szerint:
DELETE FROM DataNumenProduct WHERE ProductId=1;
A második napon Tom egy új rekordot szúrt be a táblázatba, amely ugyanazt az elsődleges kulcsot tartalmazza, mint a törölt rekord, az alábbiak szerint:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Tehát táblázatunk a következő rekordokat tartalmazza, az alábbiak szerint:
2. ábra Frissített rekordok a táblázatbanDataNumenTermékek"
Ha Jim vissza akarja állítani a törölt rekordot a táblába, az megsérti a „ProductId” elsődleges kulcs egyedi megszorítását. Ilyen esetben az alábbi megoldások egyikét használhatjuk a probléma megoldására.
1. megoldás: Módosítsa az új rekord elsődleges kulcsát az ütközés megelőzése érdekében
Módosíthatjuk a beillesztendő rekord elsődleges kulcsát egy új értékre, amely különbözik a táblázatban lévő összes rekord értékétől. Vegyük példának a fenti esetet, a beillesztendő rekordhoz módosíthatjuk az elsődleges kulcs értékét 1-ről 5-re. Ezután az újonnan generált rekordot visszaállíthatjuk a táblázatba az alábbiak szerint:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Alább láthatóak a végső rekordok a táblázatban:
3. ábra: Végső rekordok a táblázatbanDataNumen Termékek"
2. megoldás: Módosítsa a meglévő rekord elsődleges kulcsát az ütközés megelőzése érdekében
- Először is frissítenünk kell a meglévő rekord elsődleges kulcsának értékét, amely ütközést okozhat, az alábbiak szerint:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Az alábbiakban a táblázat frissített rekordjai láthatók:
4. ábra Frissített rekordok a táblázatbanDataNumen Termékek"
- Ezután visszaállíthatjuk a törölt rekordot a táblázatba, az alábbiak szerint:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Most pedig lássuk a végleges verziót, az alábbiak szerint:
5. ábra Végső rekordok a táblázatbanDataNumen Termékek"
3. megoldás: Tiltsa le az egyedi kényszertempótrarSQL-en keresztül
- A probléma megoldásához törölhetjük a „pk” elsődleges kulcs kényszert a táblázattempóbanrarily módon az alábbiak szerint:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Ezután a törölt rekordot visszaadhatjuk a táblázatba az alábbiak szerint:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Most pedig lássuk a rekordokat a táblázatban:
6. ábra Frissített rekordok a táblázatbanDataNumen Termékek"
- Ezután, mivel két rekordnak ugyanazok az elsődleges kulcsértékei, az egyiket módosítanunk kell az ütközés elkerülése érdekében, az alábbiak szerint:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Végül visszaadjuk a „pk” elsődleges kulcs kényszert a táblázathoz, az alábbiak szerint:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Most néhány rekord van a táblázatban, az alábbiak szerint:
7. ábra Frissített tartalom a táblázatban "DataNumen Termékek"
4. megoldás: Tiltsa le az egyedi kényszertempótrarily keresztül SQL Server Menedzsment Stúdió:
- Először is töröljük a „pk” elsődleges kulcs megszorítását a táblázatban a grafikus felhasználói felületen keresztül, az alábbiak szerint:
8. ábra: Törölje a „pk” elsődleges kulcs kényszert grafikus felhasználói felületen keresztül
- Ezután a törölt rekordot valós esetben beillesztjük a táblázatba, az alábbiak szerint.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Most néhány rekord van a táblázatban, az alábbiak szerint:
9. ábra Frissített tartalom a táblázatbanDataNumen Termékek"
- Ezután módosítjuk a táblázatban szereplő rekord elsődleges kulcsának értékét az alábbiak szerint:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Végül a GUI-n keresztül visszaadjuk a táblázathoz a „pk” elsődleges kulcs kényszert, az alábbiak szerint:
8. ábra: Adja vissza a „pk” elsődleges kulcs kényszert grafikus felhasználói felületen keresztül
Oldja SQL Server Adatbázis korrupció
Az egyedi korlátokon kívül, SQL Server korrupció szintén nagyon gyakori probléma, amely idegesíti a DBA-kat. Általában használhatjuk SQL Server beépített parancsok a hibák megoldására. Ha azonban nem működnek, akkor harmadik félhez folyamodhatunk SQL Server adat-helyreállító eszközök.
Szerző Bevezetés:
Jim Hu adat-helyreállítási szakértő DataNumen, Inc., amely világelső az adat-helyreállítási technológiák területén, beleértve Hozzáférés javítása és a dbf javító szoftvertermékek. További információért látogasson el www.datanumen.com








