2012-12-17 46 views
10

Tôi đang cố gắng thêm khóa chính vào cột mới được thêm vào trong tên bảng hiện có Product_Details.Thêm cột có khóa chính trong bảng hiện có

New Cột thêm: Product_Detail_ID (intnot null)

tôi đang cố gắng thêm khóa chính để Product_Detail_ID (xin lưu ý: không có khóa chính hoặc nước ngoài khác được giao bảng này)

tôi đang cố gắng với truy vấn này nhưng bị lỗi.

ALTER TABLE Product_Details 
ADD CONSTRAINT pk_Product_Detils_Product_Detail_ID PRIMARY KEY(Product_Detail_ID) 
GO 

Lỗi:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Product\_Details' and the index name 'pk\_Product\_Detils' . The duplicate key value is (0).

Am tôi thiếu cái gì ở đây? Tôi đang sử dụng SQL Server 2008 R2. Tôi sẽ đánh giá cao sự giúp đỡ nào.

+3

bảng của bạn có giá trị nhân bản trong cột này, nhưng một khóa chính đòi hỏi rằng các giá trị trong cột là duy nhất. Để tạo PK, bạn phải xóa các bản sao. –

+1

Bảng có chứa dữ liệu không? Trong trường hợp này, bạn phải đảm bảo rằng cột mới có các giá trị duy nhất trước khi biến nó thành cột pk. –

+0

Bạn đã cập nhật cột với các giá trị mới chưa? Hoặc tất cả chúng vẫn là '0' như được hiển thị trong thông báo lỗi của bạn. Đảm bảo rằng mọi giá trị * trong trường đó khác với mọi giá trị khác ... – MatBailie

Trả lời

20

Nếu bạn muốn SQL Server tự động cung cấp giá trị cho cột mới, hãy đặt nó làm nhận dạng.

ALTER TABLE Product_Details DROP COLUMN Product_Detail_ID 
GO 
ALTER TABLE Product_Details ADD Product_Detail_ID int identity(1,1) not null 
GO 
ALTER TABLE Product_Details 
add CONSTRAINT pk_Product_Detils_Product_Detail_ID primary key(Product_Detail_ID) 
GO 
+0

Cảm ơn sự giúp đỡ của bạn. Truy vấn này cũng làm việc cho tôi nhưng tôi chèn dữ liệu bằng tay (chỉnh sửa 200) và sau đó thực hiện với truy vấn của tôi .. Nó làm việc !! – Joy1979

1

Bạn nhận được lỗi vì bạn có dữ liệu hiện tại không điền đầy đủ ràng buộc.

Có 2 cách để sửa chữa nó:

  • dọn dẹp các dữ liệu hiện có trước khi thêm các hạn chế
  • thêm khó khăn với "VỚI nocheck" tùy chọn, điều này sẽ ngăn chặn máy chủ sql kiểm tra dữ liệu hiện có, chỉ dữ liệu mới sẽ được kiểm tra
+2

Tôi sẽ thêm rằng sử dụng 'WITH NOCHECK' hầu như luôn luôn là một ý tưởng tồi :) –

+2

" NOCHECK "không hoạt động trên các phím chính hoặc duy nhất. –

1
ALTER TABLE Jaya 
    ADD CONSTRAINT no primary key(No); 

đây Jaya là tên bảng,

no là tên cột,

ADD CONSTRAINT được chúng tôi đưa ra các từ khóa khóa chính

-1

k. người bạn lệnh: sql> thay đổi tablename thêm khóa chính (col_name);

ví dụ: thay đổi bảng pk_Product_Detils thêm khóa chính (Product_Detail_ID);

+0

Câu trả lời này khác gì so với câu trả lời đã cung cấp? – EWit

1

Trong mysql, tôi đã có thể đạt được với sau truy vấn

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

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