2012-12-17 6 views
10

Próbuję dodać klucz podstawowy do nowo dodanej kolumny w istniejącej nazwie tabeli Product_Details.Dodawanie kolumny z kluczem podstawowym w istniejącej tabeli

Nowa kolumna dodania: Product_Detail_ID (int i not null)

Próbuję dodać klucz podstawowy do Product_Detail_ID (uwaga: istnieje żaden inny podstawowy lub obcy klucz przypisany do tej tabeli)

próbuję z tym zapytaniem, ale pojawia się błąd.

ALTER TABLE Product_Details 
ADD CONSTRAINT pk_Product_Detils_Product_Detail_ID PRIMARY KEY(Product_Detail_ID) 
GO 

Błąd:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Product\_Details' and the index name 'pk\_Product\_Detils' . The duplicate key value is (0).

Am I brakuje czegoś tutaj? Używam programu SQL Server 2008 R2. Byłbym wdzięczny za każdą pomoc.

+3

Twoja tabela zawiera zduplikowane wartości w tej kolumnie, ale kluczem podstawowym wymaga, że ​​wartości w kolumnie są unikatowe. Aby utworzyć PK, musisz usunąć duplikaty. –

+1

Czy tabela zawiera dane? W tym przypadku musisz upewnić się, że nowa kolumna ma unikalne wartości przed wykonaniem jej w kolumnie PK. –

+0

Czy zaktualizowałeś kolumnę nowymi wartościami? A może wszystkie są nadal "0", jak pokazano w komunikacie o błędzie. Upewnij się, że * co * wartość w tym polu różni się od każdej innej wartości ... – MatBailie

Odpowiedz

20

Jeśli chcesz, aby SQL Server automatycznie podawał wartości dla nowej kolumny, ustaw ją jako tożsamość.

ALTER TABLE Product_Details DROP COLUMN Product_Detail_ID 
GO 
ALTER TABLE Product_Details ADD Product_Detail_ID int identity(1,1) not null 
GO 
ALTER TABLE Product_Details 
add CONSTRAINT pk_Product_Detils_Product_Detail_ID primary key(Product_Detail_ID) 
GO 
+0

Dzięki za pomoc. To zapytanie zadziałało również dla mnie, ale ręcznie wstawiłem dane (edycja 200), a następnie wykonuję je przy pomocy mojego zapytania. To zadziałało !! – Joy1979

1

Otrzymujesz błąd, ponieważ masz istniejące dane, które nie wypełniają ograniczenia.

Istnieją 2 sposoby, aby to naprawić:

  • oczyścić istniejące dane przed dodaniem ograniczenia
  • dodać ograniczenie z opcją „WITH nocheck”, to zatrzymać serwer sql sprawdzenie istniejących danych, tylko nowe dane zostaną sprawdzone
+2

Dodam, że używanie 'WITH NOCHECK' jest prawie zawsze złym pomysłem :) –

+2

" NOCHECK "nie działa na podstawowych lub unikalnych klawiszach. –

1
ALTER TABLE Jaya 
    ADD CONSTRAINT no primary key(No); 

tutaj Jaya jest nazwa tabeli,

no jest nazwa kolumny,

ADD CONSTRAINT jest nam daje Podstawowym słowa kluczowego klucz

-1

k. przyjaciel polecenie: sql> zmień tabelę tablename dodaj klucz podstawowy (col_name);

np: alter table pk_Product_Detils dodaj klucz podstawowy (Product_Detail_ID);

+0

Co ta odpowiedź różni się od już udzielonych odpowiedzi? – EWit

1

w MySQL, udało mi się osiągnąć następujące zapytanie

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key