2016-01-24 25 views
5

Utworzono tabelę z kolumną S_ROLL NUMBER(3) NOT NULL Teraz chcę, aby kolumna była kolumną tożsamości. Użyłem tego polecenia:Kolumna do modyfikacji nie jest kolumną tożsamości

alter table students 
modify 
(
S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY 
); 

Otrzymuję ten błąd.

S_ROLL NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY 
* 
ERROR at line 4: 
ORA-30673: column to be modified is not an identity column 
+0

http://stackoverflow.com/questions/1049210/adding-an-identity-to-an-existing-column Mam nadzieję, że to powinno ci pomóc. –

+0

@NitinGarg To pytanie dotyczy Oracle, ale pytanie, z którym się łączysz, dotyczy MS SQL Server, więc domyślam się, że to nie pomoże OP naprawić jego problem. –

Odpowiedz

11

Dostaniesz ten błąd tylko dlatego modyfikacji istniejącego kolumny jako kolumny tożsamość nie jest obsługiwany w tej chwili.

+0

jaki może być powód? i jakie jest teraz rozwiązanie? – UnKnown

+0

Rozwiązaniem jest dodanie nowej kolumny, a następnie upuszczenie istniejącej (obv upewniając się, że zajmujesz się również danymi). Nie mogę wymyślić żadnej możliwej przyczyny - musiała zostać podjęta jakaś decyzja o wdrożeniu podczas uwalniania tej funkcji. Modyfikowanie istniejącej kolumny NOT NULL NUMBER na IDENTITY oznaczałoby, że Oracle musi obliczyć najwyższy numer w kolumnie, a następnie rozpocząć od tego kroku automatyczny przyrost. Prawdopodobnie jakaś trudność w realizacji tego w optymalny sposób? Ale tylko osoby zaangażowane mogą odpowiedzieć na faktyczny powód :) – Incognito

+0

Jak mogę skopiować dane istniejącego stołu na nowy? Myślę, że skopiowanie tylko pojedynczej wartości kolumny może być niemożliwe. a następnie Jak skopiować dane tabeli na nowy? – UnKnown

0

Ponieważ modyfikowanie istniejącej kolumny do identyfikacji kolumny nie jest obsługiwane. Możesz więc użyć poniższego zapytania, aby dodać nową kolumnę.

ALTER TABLE students ADD (S_ROLL_NEW NUMBER(3) GENERATED ALWAYS AS IDENTITY); 
+0

Czy możesz to wyjaśnić? dlaczego number_new? – UnKnown

+0

Przepraszam, mój błąd, ALTER TABLE studenci ADD (S_ROLL_NEW NUMER (3) GENEROWANE ZAWSZE JAKO TOŻSAMOŚĆ); –

+0

masz na myśli, że potrzebuję nowej kolumny? to w jaki sposób mogę skopiować dane? – UnKnown

Powiązane problemy