Modificați tabelul și adăugați cheia UNIQUE duce la o eroare

I have a table called Animal. AnimalId is the primary key & I wanted to set the column AnimalType_id as UNIQUE (I have an AnimalType table and need to set a foreign key here)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

Există deja date în ambele tabele, din cauza că nu pot scăpa masa.

Cu toate acestea, rezultă o eroare:

Msg 102, nivelul 15, starea 1, linia 2
  Sintaxă incorectă lângă ".".

2
@ Conrad Frix Da eroare este ceea ce?
adăugat autor TechGuy, sursa
Mesaj 102, Nivel 15, Starea 1, Linia 2 Sintaxă incorectă în dreptul ".".
adăugat autor TechGuy, sursa
Și eroarea este ...
adăugat autor Conrad Frix, sursa
@chathuraRanasinghe Care este mesajul de eroare pe care îl vedeți când încercați să adăugați constrângerea unică?
adăugat autor Daniel Renshaw, sursa

5 răspunsuri

Consultați documentația pentru a adăuga o constrângere de masă.

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

Se pare că AnimalType_id este o cheie străină, așa că am vrut doar să vă verificați că ați înțeles că făcând această coloană unică, faceți relația una câte una - veți putea avea doar un animal de fiecare tip.

Deoarece apare o eroare la adăugarea constrângerii unice, vă voi sugera că doriți o cheie străină în loc de o constrângere unică:

ALTER TABLE Animal
    ADD CONSTRAINT FK_Animal_AnimalType
    FOREIGN KEY
    (
        AnimalType_id
    )
    REFERENCES AnimalType
    (
        id
    )

A trebuit să ghicesc numele numelui tabelului AnimalType și numele coloanei primare - modificați-le dacă acestea sunt incorecte.

12
adăugat
Și chiar mai bine: name constrângerea unică! ALTER TABLE Animale ADAUGA CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)
adăugat autor marc_s, sursa
@chathuraRanasinghe: Evident, datele dvs. au deja duplicate - nu puteți crea o constrângere UNIQUE pe o coloană care conține valori duplicate. Remediați aceste duplicate - și apoi puteți crea constrângerea unică
adăugat autor marc_s, sursa
atunci am primit această eroare ..
adăugat autor TechGuy, sursa
Mesaj 156, Nivel 15, Starea 1, Linia 3 Sintaxă incorectă în apropierea cuvântului cheie "UNIQUE".
adăugat autor TechGuy, sursa
Deja am o tastă primară în acest tabel .. Am primit această eroare> Msg 1505, Level 16, State 1, Line 1 Instrucțiunea CREATE UNIQUE INDEX sa terminat deoarece sa găsit o cheie duplicată pentru numele obiectului "dbo.Animal" și indexul numele "UQ_Animal_AnimalTypeId". Valoarea cheie duplicat este (1).
adăugat autor TechGuy, sursa
Vedeți scenariul >> link
adăugat autor TechGuy, sursa
@chathuraRanasingthe Ne pare rău, este necesar un nume de constrângere atunci când este folosit cuvântul cheie CONSTRAINT . Răspundeți la editare; și datorită lui @marc_s.
adăugat autor Daniel Renshaw, sursa
@chathuraRanasinghe Sunteți sigur că doriți ca coloana să fie unică? Așa cum am menționat în răspunsul meu, aceasta va face relația 1-1 și eroarea dvs. sugerează că nu este ceea ce vrei.
adăugat autor Daniel Renshaw, sursa

Dacă obțineți obiceiul de a da nume tuturor obiectelor (chiar și constrângerilor) pe care le creați, veți avea mai ușor timp mai târziu când trebuie să dezactivați, să renunțați sau să modificați constrângerea:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

De asemenea, este posibil să se obțină un efect de constrângere mai flexibil, de la crearea unui indice unic.

2
adăugat
Deja am o tastă primară în acest tabel .. Am primit această eroare> Msg 1505, Level 16, State 1, Line 1 Instrucțiunea CREATE UNIQUE INDEX sa terminat deoarece sa găsit o cheie duplicată pentru numele obiectului "dbo.Animal" și indexul numele "UQ_Animal_AnimalTypeId". Valoarea cheie duplicat este (1). -
adăugat autor TechGuy, sursa
Am înțeles acum. UNIQUE și KEY FOREIGN sunt două lucruri diferite. ALTER TABLE Animal ADD CONSTRAINT FK_Anul_Type CHEIE EXTERIOARĂ (AnimalType_id) REFERINȚE Animal_Type (AnimalType_id)
adăugat autor Jirka Hanika, sursa

incearca asta

ALTER TABLE nume_tabel ADD CONSTRAINT UNIQUE (nume_pagină)

1
adăugat

Cred că încercați să faceți acest lucru:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
0
adăugat
nu de fapt.it deja am un coloumn numit AnimalType_id .. Am vrut să SET ID-ul ca o cheie UNIQUE
adăugat autor TechGuy, sursa

Se pare că datele din coloană nu sunt unice. când creați o constrângere unică pe o coloană, nu puteți avea nici o intrare duplicat (puteți avea cel mult o nulă)

0
adăugat
de fapt, acest lucru este de transfer de date de la 1 db la alt DB cu adăugarea de coloumns.de mai multe de ce
adăugat autor TechGuy, sursa