2012-08-28 3 views
9

Je tente de remplacer la clé primaire d'une table de ma base de données SQL par la clé existante par une clé composite, qui n'inclut pas la colonne existante. Le code suivant ne fonctionne pas en raison des messages d'erreur suivants:Modification de la clé primaire en clé composite (la clé primaire existe déjà)

DROP PRIMARY KEY:

Syntaxe incorrecte près PRIMAIRES. COLONNE attendre, CONTRAINTE, ID ou QUOTED_ID

ADD KEY PRIMAIRE:

Syntaxe incorrecte près PRIMAIRES. Attendant ID

Code T-SQL:

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

EDIT

j'ai pu accomplir cela en utilisant les deux instructions de requête suivants

ALTER TABLE AgentIdentification 
DROP CONSTRAINT [PK_AgentId_Id] 
GO 

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

Au lieu de demander que SQL "DROP PRIMARY KEY" J'avais besoin de le dire à "DROP CONSTRAINT", séparant aussi ces deux actions Deux requêtes ont aidé.

+7

S'il vous plaît appeler ceci avec le SGBDR correct. SQL est _not_ une base de données; c'est une langue utilisée par beaucoup (légèrement différente dans tous les cas). – Ben

+0

Souhaitez-vous supprimer le champ PK ou la contrainte PK? – danihp

+3

S'il vous plaît: 1) Spécifiez votre base de données, 2) Coupez/collez le message d'erreur exact, 3) Envisagez votre commande en deux instructions "alter table", 4) Soyez conscient que vous aurez probablement besoin d'autres instructions), ou vous pourriez même devoir laisser tomber et recréer la table entière – paulsm4

Répondre

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


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

ajouter une clé primaire:

MySQL/SQL Server/Oracle/MS Access: 

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

'ALTER TABLE .. DROP PRIMARY KEY' fonctionne également pour Oracle si je ne me trompe pas –

+1

@NealR: Vous n'avez pas répondu. Quel RDBMS utilisez-vous? SQL-Server, MySQL, Oracle, Postgres, DB2, un autre? – paulsm4

+0

C'est un serveur SQL. Vous allez devoir m'excuser, j'interviens maintenant et je ne connais pas tous les termes. – NealR

Questions connexes