2016-01-24 52 views
5

我已經創建了一個列的列S_ROLL NUMBER(3) NOT NULL現在我想將此列作爲標識列。 我用這個命令要修改的列不是標識列

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

然後我得到這個錯誤。

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希望這應該對你有所幫助。 –

+0

@NitinGarg這個問題是關於Oracle的,但是你鏈接到的問題是關於MS SQL Server的,所以我想這不會幫助OP解決他們的問題。 –

回答

11

由於現在不支持將現有列修改爲IDENTITY列,所以出現此錯誤。

+0

可能是什麼原因?現在有什麼解決方案? – UnKnown

+0

解決方案是添加一個新列,然後刪除現有的列(確保您也確實處理數據)。我想不出有什麼可能的原因 - 在發佈此功能時,必須做出某種實施決定。將現有的NOT NULL NUMBER列修改爲IDENTITY意味着Oracle需要計算列中最高的數字,然後從那裏開始自動增量。可能以某種最佳方式執行此操作時遇到一些困難?但只有相關人員才能回答實際原因:) – Incognito

+0

如何將現有表格的數據複製到新的表格?我認爲只複製單列值可能是不可能的。那麼如何將表格的數據複製到新的? – UnKnown

0

由於不支持修改現有列以識別列。所以你可以使用下面的查詢來添加新的列。

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

你能解釋一下嗎?爲什麼number_new? – UnKnown

+0

對不起我的錯誤,ALTER TABLE students ADD(S_ROLL_NEW NUMBER(3)GENERATED ALWAYS AS ASENENYEN); –

+0

你的意思是我需要新的專欄?那我怎麼才能複製這些數據呢? – UnKnown