4 lahendust, kui kordumatu piirang ei lase teil sisestada uut kirjet SQL Server

Kui teil ei õnnestunud unikaalse piirangu tõttu uut kirjet tabelisse sisestada, ärge jätke seda artiklit lugemata. See aitab teil seda probleemi lahendada.

Selles artiklis tutvustame nelja meetodit probleemi lahendamiseks, kui teil ei õnnestu uut kirjet sisestada, kuna see rikub tabeli kordumatut piirangut SQL Server.

Tõeline juhtum:

Vaatame nüüd reaalset juhtumit. Meil on andmebaas nimega "Toode" ja seal on tabel nimega "DataNumenToode” andmebaasis. Tabelis on kaks välja, st “ProductId” ja “ProductName”, mille andmetüübid on vastavalt “int” ja “varchar”. Ja "ProductId" on unikaalse piiranguga esmane võti.

Praegu on tabelis mõned kirjed, nagu allpool:Kirjed tabelis "DataNumenToode”

Joonis 1 Kirjed tabelis "DataNumenToode”

Eeldusel, et andmebaasil on kaks DBA-d, st Jim ja Tom. Ühel päeval kustutas Jim tabelist esimese kirje, nagu allpool:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Teisel päeval lisas Tom tabelisse uue kirje, millel on kustutatud kirjega sama primaarvõti, nagu allpool:

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

Seega on meie tabelis järgmised kirjed, nagu allpool:

Uuendatud kirjed tabelis "DataNumenTooted"

Joonis 2 Värskendatud kirjed tabelis "DataNumenTooted"

Nüüd, kui Jim soovib kustutatud kirje tabelisse tagasi taastada, rikub see primaarvõtme „ProductId” ainulaadset piirangut. Sellisel juhul saame probleemi lahendamiseks kasutada ühte allolevatest lahendustest.

1. lahendus: konflikti ärahoidmiseks muutke uue kirje esmast võtit

Saame muuta sisestatava kirje primaarvõtit uueks väärtuseks, mis erineb kõigi tabeli olemasolevate kirjete omadest. Võtke näiteks ülaltoodud juhtum, et sisestatava kirje jaoks saame primaarvõtme väärtust muuta vahemikus 1 kuni 5. Seejärel saame uue loodud kirje tagasi tabelisse taastada, nagu allpool.

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

Allpool on viimased rekordid tabelis:Lõplikud rekordid tabelis "DataNumen Tooted"

Joonis 3 Lõplikud kirjed tabelis "DataNumen Tooted"

2. lahendus: konflikti ärahoidmiseks muutke olemasoleva kirje esmast võtit

  1. Esiteks peame värskendama olemasoleva kirje primaarvõtme väärtust, mis võib põhjustada konflikti, nagu allpool.
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Allpool on tabelis värskendatud kirjed:

Uuendatud kirjed tabelis "DataNumen Tooted"

Joonis 4 Värskendatud kirjed tabelis "DataNumen Tooted"

  1. Seejärel saame kustutatud kirje tabelisse tagasi taastada, nagu allpool:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Nüüd vaatame lõplikku versiooni, nagu allpool:

Lõplikud rekordid tabelis "DataNumen Tooted"

Joonis 5 Lõplikud kirjed tabelis "DataNumen Tooted"

3. lahendus: keelake kordumatu piirangutemporarSQL-i kaudu

  1. Probleemi lahendamiseks saame kustutada tabeli tempos primaarvõtme piirangu “pk”.rarily, nagu allpool:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Seejärel saame kustutatud kirje tabelisse tagasi lisada järgmiselt:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Vaatame nüüd tabelis olevaid rekordeid:

Uuendatud kirjed tabelis "DataNumen Tooted"

Joonis 6 Värskendatud kirjed tabelis "DataNumen Tooted"

  1. Kuna kahel kirjel on samad primaarvõtme väärtused, peame konflikti vältimiseks ühte neist muutma, nagu allpool.
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Lõpuks lisame tabelisse tagasi primaarvõtme piirangu "pk", nagu allpool:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Nüüd on tabelis mõned kirjed, nagu allpool:

Uuendatud sisu tabelis "DataNumen Tooted"

Joonis 7 Tabeli värskendatud sisuDataNumen Tooted"

4. lahendus: keelake kordumatu piirangutemporarily kaudu SQL Server Juhtimisstuudio:

  1. Esiteks kustutame GUI kaudu tabelist primaarvõtme piirangu „pk”, nagu allpool:

Kustutage GUI kaudu primaarvõtme piirang "pk".

Joonis 8 Kustutage GUI kaudu primaarvõtme piirang "pk".

  1. Seejärel sisestame kustutatud kirje reaaljuhul tabelisse, nagu allpool.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Nüüd on tabelis mõned kirjed, nagu allpool:

Uuendatud sisu tabelis "DataNumen Tooted"

Joonis 9 Tabeli värskendatud sisuDataNumen Tooted"

  1. Seejärel muudame tabelis olemasoleva kirje primaarvõtme väärtust järgmiselt:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Lõpuks lisame tabelisse GUI kaudu tagasi primaarvõtme piirangu "pk", nagu allpool:Lisage GUI kaudu tagasi esmase võtme piirang "pk".

Joonis 8 Lisage GUI kaudu tagasi primaarvõtme piirang "pk".

Lahendama SQL Server Andmebaasi korruptsioon

Peale ainulaadsete piirangute SQL Server korruptsioon on ka väga levinud probleem, mis häirib DBA-sid. Tavaliselt saame kasutada SQL Server sisseehitatud käsud korruptsioonide lahendamiseks. Kui need aga ei tööta, võime pöörduda mõne kolmanda osapoole poole SQL Server andmete taastamise tööriistad.

Autori sissejuhatus:

Jim Hu on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas Juurdepääsu remont ja dbf tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.