này bị lộn xộn với ràng buộc khoá ngoại và tiểu học, vì vậy đây là một số kịch bản để giúp bạn trên con đường của bạn:
Đầu tiên, tạo một cột trùng lặp với một tên tạm thời:
alter table yourTable add tempId int NOT NULL default -1;
update yourTable set tempId = id;
Tiếp theo, lấy tên của ràng buộc khoá chính của bạn:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'yourTable';
Bây giờ hãy thử thả các ràng buộc khoá chính cho cột của bạn:
ALTER TABLE yourTable DROP CONSTRAINT PK_yourTable_id;
Nếu bạn có các phím nước ngoài, nó sẽ thất bại, vì vậy nếu để thả các ràng buộc khoá ngoại. GIỮ THEO D WHI ĐỂ B TNG BẠN CHẠY NÀY CHO BẠN CÓ THỂ THÊM CÁC CẤU TRÚC LẠI TRÊN LATER !!!
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'otherTable';
alter table otherTable drop constraint fk_otherTable_yourTable;
commit;
..
Khi tất cả ràng buộc khoá ngoại của bạn đã được gỡ bỏ, bạn sẽ có thể để loại bỏ các hạn chế PK, thả cột đó, đổi tên cột temp của bạn, và thêm các hạn chế PK để cột rằng:
ALTER TABLE yourTable DROP CONSTRAINT PK_yourTable_id;
alter table yourTable drop column id;
EXEC sp_rename 'yourTable.tempId', 'id', 'COLUMN';
ALTER TABLE yourTable ADD CONSTRAINT PK_yourTable_id PRIMARY KEY (id)
commit;
Cuối cùng, thêm những hạn chế FK lại:
alter table otherTable add constraint fk_otherTable_yourTable foreign key (yourTable_id) references yourTable(id);
..
El Fin!
Bạn có thể đăng giản đồ của bảng tại đây không? –
Tôi chắc chắn có những lý do tuyệt vời mà SQL Server không hỗ trợ loại bỏ một đặc tính nhận dạng từ một cột thông qua một câu lệnh ALTER TABLE ... nhưng nó vẫn làm tôi buồn vì đó là trường hợp. –