2016-01-24 164 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