4 Megoldás, ha az egyedi kényszer megakadályozza új rekord beszúrását SQL Server

Oszd meg most:

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:Rekordok a táblázatbanDataNumenTermék"

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:

Frissített rekordok a táblázatbanDataNumenTermékek"

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:Végső rekordok a táblázatban "DataNumen Termékek"

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

  1. 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:

Frissített rekordok a táblázatbanDataNumen Termékek"

4. ábra Frissített rekordok a táblázatbanDataNumen Termékek"

  1. 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:

Végső rekordok a táblázatbanDataNumen Termékek"

5. ábra Végső rekordok a táblázatbanDataNumen Termékek"

3. megoldás: Tiltsa le az egyedi kényszertempótrarSQL-en keresztül

  1. 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;
  1. 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:

Frissített rekordok a táblázatbanDataNumen Termékek"

6. ábra Frissített rekordok a táblázatbanDataNumen Termékek"

  1. 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';
  1. 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:

Frissített tartalom a táblázatban "DataNumen Termékek"

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ó:

  1. 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:

Törölje a „pk” elsődleges kulcs kényszert a grafikus felhasználói felületen keresztül

8. ábra: Törölje a „pk” elsődleges kulcs kényszert grafikus felhasználói felületen keresztül

  1. 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:

Frissített tartalom a táblázatbanDataNumen Termékek"

9. ábra Frissített tartalom a táblázatbanDataNumen Termékek"

  1. 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';
  1. Végül a GUI-n keresztül visszaadjuk a táblázathoz a „pk” elsődleges kulcs kényszert, az alábbiak szerint:Adja hozzá a „pk” elsődleges kulcs kényszert a grafikus felhasználói felületen keresztül

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

Oszd meg most:

Hozzászólások lezárva.