2011-07-21 38 views
49

Tôi có một bảng được thiết lập hiện không có khóa chính. Tất cả những gì tôi cần làm là thêm một khóa chính, không có null, auto_increment.Làm cách nào để thêm khóa chính auto_increment trong cơ sở dữ liệu SQL Server?

Tôi đang làm việc với cơ sở dữ liệu Microsoft SQL Server. Tôi hiểu rằng nó không thể được thực hiện trong một lệnh duy nhất nhưng tất cả các lệnh tôi cố gắng giữ trả lại lỗi cú pháp.

chỉnh sửa ---------------

Tôi đã tạo khóa chính và thậm chí đặt nó là không rỗng. Tuy nhiên, tôi không thể thiết lập auto_increment.

Tôi đã thử:

ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment 
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment 
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment 
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment 

Tôi đang sử dụng NVARCHAR bởi vì nó sẽ không cho phép tôi thiết NOT NULL dưới int

+1

Tại sao bạn không thể thêm cột IDENTITY mới? –

+2

http://stackoverflow.com/questions/4862385/sql-server-add-auto-increment-primary-key-to-existing-table –

+0

Không quan tâm, cú pháp 'auto_increment' đến từ đâu? Là nó truy cập? –

Trả lời

102

Nó có thể được thực hiện trong một lệnh duy nhất. Bạn cần phải thiết lập thuộc tính SẮC cho "số tự động"

ALTER TABLE MyTable ADD mytableID int NOT NULL IDENTITY (1,1) PRIMARY KEY 

Chính xác hơn để thiết lập một bảng mức độ hạn chế tên

ALTER TABLE MyTable 
    ADD MytableID int NOT NULL IDENTITY (1,1), 
    ADD CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (MyTableID) 

Xem ALTER TABLE and IDENTITY trên MSDN

+1

HOÀN HẢO! Cảm ơn bạn đã giúp đỡ. Tôi sẽ chấp nhận câu trả lời khi bộ đếm thời gian cho phép tôi. : D – dcp3450

+4

là OK, nhưng cú pháp chính xác là không có thứ hai "ADD", đó là: ALTER TABLE MyTable ADD MytableID int SẮC NOT NULL (1,1), CONSTRAINT PK_MyTable PRIMARY KEY Clustered (MyTableID) –

19

Nếu bảng đã có chứa dữ liệu và bạn muốn thay đổi một trong các cột thành danh tính:

Trước tiên hãy tạo bảng mới có cùng cột và chỉ định khóa chính-kolumn:

create table TempTable 
(
    Id int not null identity(1, 1) primary key 
    --, Other columns... 
) 

Sau đó sao chép tất cả các hàng từ bảng gốc sang bảng mới bằng cách sử dụng tiêu chuẩn insert -statement.

Sau đó thả bảng gốc.

Và cuối cùng đổi tên TempTable để bất cứ điều gì bạn muốn sử dụng sp_rename:

http://msdn.microsoft.com/en-us/library/ms188351.aspx

+0

này tạo cú pháp bảng là ** thực hành tốt ** theo lời khuyên của tác giả [this] (http://stackoverflow.com/a/4862427/2218697) đăng trong ý kiến, hy vọng sẽ giúp ai đó. – stom

11

Bạn cũng có thể thực hiện thao tác này thông qua SQL Server Management Studio.

Nhấp chuột phải vào bảng chọn -> Modify

Nhấp chuột phải vào trường bạn muốn thiết lập như PK -> Thiết Primary Key

Dưới Thuộc tính Column thiết "Identity Specification" Yes , sau đó chỉ định giá trị bắt đầu và giá trị gia tăng.

Sau đó, trong tương lai nếu bạn muốn có thể chỉ cần kịch bản loại điều ra bạn có thể nhấp chuột phải vào bảng bạn chỉ cần sửa đổi và chọn

"SCRIPT TABLE AS" -> TẠO CHO

để bạn có thể tự mình xem cú pháp chính xác để thực hiện tác vụ này.

1

Nếu bạn có cột, nó rất dễ dàng.

Sử dụng trình thiết kế, bạn có thể đặt cột làm nhận dạng (1,1): nhấp chuột phải vào bảng → thiết kế → phần bên trái (nhấp chuột phải) → thuộc tính → trong cột nhận dạng, chọn # cột.


Thuộc tính:

enter image description here

nhận dạng cột:

enter image description here

0

Trong SQL Server 2008:

  • Nhấp chuột phải vào bảng
  • Tới thiết kế
  • Chọn datatype số
  • Thêm Tên cột mới
  • Hãy nhận dạng kỹ thuật để 'YES'
-2

bạn có thể thử này. .. ALTER TABLE Your_Table THÊM table_ID int NOT NULL PRIMARY KEY auto_increment;

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