4 Ratkaisua, kun yksilöllinen rajoitus estää sinua lisäämästä uutta tietuetta SQL Server

Jos et onnistunut lisäämään uutta tietuetta taulukkoon ainutlaatuisen rajoitteen vuoksi, älä unohda lukea tämä artikkeli. Se auttaa sinua ratkaisemaan tämän ongelman.

Tässä artikkelissa esittelemme 4 tapaa ratkaista ongelma, kun et lisää uutta tietuetta, koska se rikkoo taulukon ainutlaatuista rajoitusta SQL Server.

Todellinen tapaus:

Katsotaan nyt todellinen tapaus. Meillä on tietokanta nimeltä "Tuote" ja siellä on taulukko nimeltä "DataNumenTuote” tietokannassa. Taulukossa on kaksi kenttää, eli "ProductId" ja "ProductName", joiden tietotyypit ovat "int" ja "varchar". Ja "ProductId" on ensisijainen avain, jolla on ainutlaatuinen rajoitus.

Tällä hetkellä taulukossa on joitain tietueita, kuten alla:Ennätykset taulukossa "DataNumenTuote"

Kuva 1 Tietueet taulukossa "DataNumenTuote"

Olettaen, että tietokannassa on kaksi DBA:ta, eli Jim ja Tom. Eräänä päivänä Jim poisti taulukon ensimmäisen tietueen, kuten alla:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

Toisena päivänä Tom lisäsi taulukkoon uuden tietueen, jolla on sama ensisijainen avain poistetun tietueen kanssa, kuten alla:

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

Joten taulukossamme on seuraavat tietueet, kuten alla:

Päivitetyt tietueet taulukossa "DataNumenTuotteet"

Kuva 2 Päivitetyt tietueet taulukossa "DataNumenTuotteet"

Jos Jim nyt haluaa palauttaa poistetun tietueen takaisin taulukkoon, se rikkoo ensisijaisen avaimen "ProductId" ainutlaatuista rajoitusta. Tällaisessa tapauksessa voimme käyttää jotakin alla olevista kiertotavoista ongelman ratkaisemiseksi.

Ratkaisu 1: Estä ristiriidat muokkaamalla uuden tietueen ensisijaista avainta

Voimme muokata lisättävän tietueen ensisijaista avainta uuteen arvoon, joka eroaa kaikkien taulukon olemassa olevien tietueiden arvoista. Otetaan esimerkkinä yllä oleva tapaus, lisättävää tietuetta varten voimme muuttaa ensisijaisen avaimen arvon 1:stä 5:een. Sitten voimme palauttaa uuden luodun tietueen takaisin taulukkoon, kuten alla:

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

Alla taulukon lopulliset ennätykset:Lopulliset ennätykset taulukossa "DataNumen Tuotteet"

Kuva 3 Taulukon lopulliset tietueet "DataNumen Tuotteet"

Kiertotapa 2: Estä konfliktit muokkaamalla olemassa olevan tietueen ensisijaista avainta

  1. Ensin meidän on päivitettävä olemassa olevan tietueen ensisijaisen avaimen arvo, joka voi aiheuttaa ristiriidan, kuten alla:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

Alla on päivitetyt tietueet taulukossa:

Päivitetyt tietueet taulukossa "DataNumen Tuotteet"

Kuva 4 Päivitetyt tietueet taulukossa "DataNumen Tuotteet"

  1. Sitten voimme palauttaa poistetun tietueen takaisin taulukkoon seuraavasti:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Katsotaan nyt lopullinen versio, kuten alla:

Lopulliset ennätykset taulukossa "DataNumen Tuotteet"

Kuva 5 Lopulliset tietueet taulukossa "DataNumen Tuotteet"

Ratkaisu 3: Poista yksilöllinen rajoitustempo käytöstärarSQL:n kautta

  1. Ongelman ratkaisemiseksi voimme poistaa ensisijaisen avaimen rajoitteen "pk" taulukon tempostararily, kuten alla:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. Sitten voimme lisätä poistetun tietueen takaisin taulukkoon seuraavasti:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Katsotaan nyt taulukon tietueita:

Päivitetyt tietueet taulukossa "DataNumen Tuotteet"

Kuva 6 Päivitetyt tietueet taulukossa "DataNumen Tuotteet"

  1. Koska kahdella tietueella on samat ensisijaisen avaimen arvot, meidän on muutettava yhtä niistä ristiriitojen estämiseksi, kuten alla:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Lopuksi lisäämme takaisin ensisijaisen avaimen rajoitteen "pk" taulukkoon, kuten alla:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Nyt taulukossa on joitain tietueita, kuten alla:

Päivitetty sisältö taulukossa "DataNumen Tuotteet"

Kuva 7 Päivitetty sisältö taulukossa "DataNumen Tuotteet"

Ratkaisu 4: Poista yksilöllinen rajoitustempo käytöstärarkautta SQL Server Management Studio:

  1. Ensinnäkin poistamme ensisijaisen avaimen rajoitteen "pk" taulukosta graafisen käyttöliittymän kautta, kuten alla:

Poista ensisijaisen avaimen rajoitus "pk" graafisen käyttöliittymän kautta

Kuva 8 Poista ensisijaisen avaimen rajoitus "pk" GUI:n kautta

  1. Sitten lisäämme poistetun tietueen todellisessa tapauksessa taulukkoon, kuten alla.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Nyt taulukossa on joitain tietueita, kuten alla:

Päivitetty sisältö taulukossa "DataNumen Tuotteet"

Kuva 9 Päivitetty sisältö taulukossa "DataNumen Tuotteet"

  1. Sitten muokkaamme taulukon olemassa olevan tietueen ensisijaisen avaimen arvoa seuraavasti:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Lopuksi lisäämme takaisin ensisijaisen avaimen rajoitteen "pk" taulukkoon graafisen käyttöliittymän kautta, kuten alla:Lisää takaisin ensisijaisen avaimen rajoitus "pk" GUI:n kautta

Kuva 8 Lisää takaisin ensisijaisen avaimen rajoitus "pk" GUI:n kautta

Ratkaista SQL Server Tietokannan vioittuminen

Muut kuin ainutlaatuiset rajoitukset, SQL Server korruptio on myös hyvin yleinen ongelma, joka ärsyttää DBA:ita. Normaalisti voimme käyttää SQL Server sisäänrakennetut komennot vikojen ratkaisemiseksi. Jos ne eivät kuitenkaan toimi, voimme turvautua kolmannen osapuolen puoleen SQL Server tietojen palautustyökalut.

Tekijän esittely:

Jim Hu on tietojen palauttamisen asiantuntija DataNumen, Inc., joka on maailman johtava tietojen palautustekniikoissa, mukaan lukien Kulun korjaus ja dbf korjata ohjelmistotuotteita. Lisätietoja osoitteessa www.datanumen.com

Kommenttien lisääminen on estetty.