2012-08-28 8 views
9

Sto provando a modificare la chiave primaria di una tabella nel mio database SQL dalla chiave esistente a una chiave composita, che non include la colonna esistente. Il seguente codice non funziona a causa dei seguenti messaggi di errore:Cambia chiave primaria a chiave composita (la chiave primaria esiste già)

GOCCIA PRIMARY KEY:

sintassi non corretta in prossimità PRIMARIA. Prevedendo COLONNA, VINCOLO, ID, o QUOTED_ID

ADD PRIMARY KEY:

sintassi non corretta in prossimità PRIMARIA. In attesa ID

codice T-SQL:

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

EDIT

sono stato in grado di ottenere questo risultato utilizzando le seguenti due istruzioni di query

ALTER TABLE AgentIdentification 
DROP CONSTRAINT [PK_AgentId_Id] 
GO 

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

Anziché richiedere che SQL "DROP PRIMARY KEY" Avevo bisogno di dirlo a "DROP CONSTRAINT", separando anche queste due azioni nto due domande aiutate.

+7

Si prega di etichettare questa con l'RDBMS corretta. SQL non è un database; è un linguaggio usato da molti (leggermente diverso in ogni caso). – Ben

+0

Vuoi eliminare il campo PK o il vincolo PK? – danihp

+3

Per favore: 1) Specifica il tuo database, 2) Taglia/incolla il messaggio esatto di errore, 3) Valuta la possibilità di suddividere il tuo comando in due istruzioni "alter table", 4) Ricordati che probabilmente avrai bisogno di altre dichiarazioni (es.), o potresti anche dover rilasciare e ricreare l'intero tavolo – paulsm4

risposta

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


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

Per aggiungere la chiave primaria:

MySQL/SQL Server/Oracle/MS Access: 

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

'ALTER TABLE .. DROP PRIMARY KEY' funziona anche per Oracle se non mi sbaglio –

+1

@NealR: non hai risposto. Che tipo di RDBMS usi? SQL-Server, MySQL, Oracle, Postgres, DB2, un altro? – paulsm4

+0

È un server SQL. Dovrai scusarmi, sto internando adesso e non ho familiarità con tutti i termini. – NealR