2016-01-24 25 views
5

Tôi đã tạo một bảng có cột S_ROLL NUMBER(3) NOT NULL Bây giờ, tôi muốn biến cột này thành cột nhận dạng. Tôi đã sử dụng lệnh nàyCột cần sửa đổi không phải là cột nhận dạng

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

Sau đó, tôi nhận được lỗi này.

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 Hy vọng điều này sẽ giúp bạn. –

+0

@NitinGarg Câu hỏi này là về Oracle, nhưng câu hỏi mà bạn đã liên kết là về MS SQL Server, vì vậy tôi đoán nó sẽ không giúp OP giải quyết vấn đề của họ. –

Trả lời

11

Bạn nhận được lỗi này đơn giản vì việc sửa đổi cột hiện tại thành cột IDENTITY không được hỗ trợ ngay bây giờ.

+0

lý do gì có thể? và giải pháp là gì bây giờ? – UnKnown

+0

Giải pháp là thêm cột mới và sau đó thả cột hiện tại (obv đảm bảo rằng bạn cũng quan tâm đến dữ liệu). Tôi không thể nghĩ ra một lý do có thể cho việc này - chắc hẳn đã có một số quyết định thực hiện trong khi phát hành tính năng này. Sửa đổi cột NOT NULL NUMBER thành IDENTITY có nghĩa là Oracle cần tính số cao nhất trong cột và sau đó bắt đầu tăng tự động từ đó. Có lẽ một số khó khăn trong việc thực hiện điều này một cách tối ưu? Nhưng chỉ những người có liên quan mới có thể trả lời lý do thực tế :) – Incognito

+0

Làm thế nào tôi có thể sao chép dữ liệu của bảng hiện tại sang bảng mới? Tôi nghĩ rằng chỉ sao chép giá trị cột đơn có thể là không thể. thì sao chép dữ liệu của bảng sang bảng mới? – UnKnown

0

Khi sửa đổi cột hiện tại để xác định cột không được hỗ trợ. Vì vậy, bạn có thể sử dụng truy vấn bên dưới để thêm cột mới.

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

Bạn có thể giải thích điều đó không? tại sao number_new? – UnKnown

+0

xin lỗi lỗi của tôi, ALTER TABLE học sinh THÊM (S_ROLL_NEW SỐ (3) GENERATED ALWAYS AS IDENTITY); –

+0

bạn có nghĩa là tôi cần cột mới? sau đó làm thế nào tôi có thể sao chép dữ liệu? – UnKnown

Các vấn đề liên quan