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:
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:
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:
Kuva 3 Taulukon lopulliset tietueet "DataNumen Tuotteet"
Kiertotapa 2: Estä konfliktit muokkaamalla olemassa olevan tietueen ensisijaista avainta
- 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:
Kuva 4 Päivitetyt tietueet taulukossa "DataNumen Tuotteet"
- Sitten voimme palauttaa poistetun tietueen takaisin taulukkoon seuraavasti:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Katsotaan nyt lopullinen versio, kuten alla:
Kuva 5 Lopulliset tietueet taulukossa "DataNumen Tuotteet"
Ratkaisu 3: Poista yksilöllinen rajoitustempo käytöstärarSQL:n kautta
- Ongelman ratkaisemiseksi voimme poistaa ensisijaisen avaimen rajoitteen "pk" taulukon tempostararily, kuten alla:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Sitten voimme lisätä poistetun tietueen takaisin taulukkoon seuraavasti:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Katsotaan nyt taulukon tietueita:
Kuva 6 Päivitetyt tietueet taulukossa "DataNumen Tuotteet"
- 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';
- 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:
Kuva 7 Päivitetty sisältö taulukossa "DataNumen Tuotteet"
Ratkaisu 4: Poista yksilöllinen rajoitustempo käytöstärarkautta SQL Server Management Studio:
- Ensinnäkin poistamme ensisijaisen avaimen rajoitteen "pk" taulukosta graafisen käyttöliittymän kautta, kuten alla:
Kuva 8 Poista ensisijaisen avaimen rajoitus "pk" GUI:n kautta
- 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:
Kuva 9 Päivitetty sisältö taulukossa "DataNumen Tuotteet"
- Sitten muokkaamme taulukon olemassa olevan tietueen ensisijaisen avaimen arvoa seuraavasti:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Lopuksi lisäämme takaisin ensisijaisen avaimen rajoitteen "pk" taulukkoon graafisen käyttöliittymän kautta, kuten alla:
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









