Một IDENTITY
chế không thể được thêm vào một cột hiện có, vậy làm thế nào bạn thêm này cần phải được suy nghĩ ban đầu của bạn. Có hai lựa chọn:
- Tạo một bảng mới bao gồm một khóa chính đậm đà bản sắc và thả các bảng hiện có
- Tạo một cột khóa chính mới đậm đà bản sắc và thả các cột 'P_Id' hiện
Có một cách thứ ba, đó là cách tiếp cận tốt hơn cho các bảng rất lớn thông qua tuyên bố ALTER TABLE...SWITCH
. Xem Adding an IDENTITY
to an existing column để biết ví dụ về từng loại. Trong câu trả lời cho câu hỏi này, nếu bảng không phải là quá lớn, tôi khuyên bạn nên chạy sau:
-- Check that the table/column exist and no primary key is already on the table.
IF COL_LENGTH('PERSONS','P_ID') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = 'PERSONS')
-- Add table schema to the WHERE clause above e.g. AND TABLE_SCHEMA ='dbo'
BEGIN
ALTER TABLE PERSONS
ADD P_ID_new int IDENTITY(1, 1)
GO
ALTER TABLE PERSONS
DROP COLUMN P_ID
GO
EXEC sp_rename 'PERSONS.P_ID_new', 'P_ID', 'Column'
GO
ALTER TABLE PERSONS
ADD CONSTRAINT PK_P_ID PRIMARY KEY CLUSTERED (P_ID)
GO
END
Ghi chú: Bằng cách sử dụng một cách rõ ràng từ khóa CONSTRAINT
các ràng buộc khoá chính được đưa ra một tên cụ thể chứ không phải là tùy thuộc vào SQL Server để tự động gán tên.
Chỉ bao gồm CLUSTERED
trên số PRIMARY KEY
nếu số dư tìm kiếm cho một P_ID cụ thể và số lượng ghi lớn hơn lợi ích của việc phân cụm bảng theo một số chỉ mục khác. Xem Create SQL IDENTITY
as PRIMARY KEY
.
bạn nên đánh dấu một câu trả lời là được chấp nhận. –