2012-08-28 24 views
9

Tôi đang cố gắng thay đổi khóa chính của bảng trong cơ sở dữ liệu SQL của tôi từ khóa hiện tại sang khóa tổng hợp, không bao gồm cột hiện tại. Các mã sau đây không hoạt động do các thông báo lỗi sau:Thay đổi khóa chính thành khóa tổng hợp (khóa chính đã tồn tại)

thả PRIMARY KEY:

không đúng cú pháp gần TIỂU. Mong COLUMN, CONSTRAINT, ID, hoặc QUOTED_ID

ADD PRIMARY KEY:

không đúng cú pháp gần TIỂU. Mong ID

mã T-SQL:

ALTER TABLE AgentIdentification 
DROP PRIMARY KEY Number, 
ADD PRIMARY KEY (AgentId, IdIndicator) 

EDIT

tôi đã có thể thực hiện điều này bằng cách sử dụng hai câu truy vấn sau đây

ALTER TABLE AgentIdentification 
DROP CONSTRAINT [PK_AgentId_Id] 
GO 

ALTER TABLE AgentIdentification 
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator) 

Thay vì yêu cầu đó SQL "DROP PRIMARY KEY" Tôi cần phải nói với nó "DROP CONSTRAINT", cũng tách hai hành động này vào hai truy vấn đã giúp.

+7

Hãy tag này với RDBMS đúng. SQL là _not_ một cơ sở dữ liệu; đó là ngôn ngữ được nhiều người sử dụng (hơi khác nhau trong mọi trường hợp). – Ben

+0

Bạn có muốn bỏ giới hạn PK hoặc PK không? – danihp

+3

Xin vui lòng: 1) Chỉ định cơ sở dữ liệu của bạn, 2) Cắt/dán thông báo lỗi chính xác, 3) Xem xét ngắt lệnh của bạn thành hai câu lệnh "thay đổi bảng", 4) Lưu ý rằng bạn có thể cần các câu lệnh khác (vd: để giảm ràng buộc), hoặc thậm chí bạn có thể phải thả và tạo lại toàn bộ bảng – paulsm4

Trả lời

20
/* For SQL Server/Oracle/MS ACCESS */ 
    ALTER TABLE AgentIdentification 
    DROP CONSTRAINT PK_Table1_Col1 


    /* For MySql */ 
    ALTER TABLE AgentIdentification 
    DROP PRIMARY KEY 

Để Thêm khóa chính:

MySQL/SQL Server/Oracle/MS Access: 

ALTER TABLE Table1 
ADD CONSTRAINT pk_PersonID PRIMARY KEY (AgentId, IdIndicator) 
+1

'ALTER TABLE .. DROP PRIMARY KEY' cũng hoạt động cho Oracle nếu tôi không nhầm –

+1

@NealR: Bạn không trả lời. Bạn sử dụng RDBMS nào? SQL-Server, MySQL, Oracle, Postgres, DB2, một cái khác? – paulsm4

+0

Đây là máy chủ SQL. Bạn sẽ phải tha thứ cho tôi, tôi đang thực tập ngay bây giờ và không quen thuộc với tất cả các điều khoản. – NealR