web-dev-qa-db-fra.com

Ajout d'une colonne avec la clé primaire dans la table existante

J'essaie d'ajouter la clé primaire à la colonne nouvellement ajoutée dans le nom de table existant Product_Details.

Nouvelle colonne ajoutée: Product_Detail_ID (int et not null)

J'essaie d'ajouter la clé primaire à Product_Detail_ID (veuillez noter: aucune autre clé primaire ou étrangère n'est affectée à cette table)

J'essaie avec cette requête mais j'obtiens une erreur.

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

Erreur:

Le CREATE UNIQUE INDEX l'instruction s'est terminée car une clé en double a été trouvée pour le nom de l'objet 'dbo.Product\_Details' et le nom de l'index 'pk\_Product\_Detils'. La valeur de clé en double est (0).

Est-ce que j'ai râté quelque chose? J'utilise SQL Server 2008 R2. J'apprécierais toute aide.

18
Joy1979

Si vous souhaitez que SQL Server fournisse automatiquement des valeurs pour la nouvelle colonne, faites-en une identité.

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
32
RichardTheKiwi
ALTER TABLE Jaya 
  ADD CONSTRAINT no primary key(No);

ici Jaya est le nom de la table,

no est le nom de la colonne,

ADD CONSTRAINT donnons-nous le mot-clé de la clé primaire

1
JayaN

Vous obtenez l'erreur car vous disposez de données existantes qui ne remplissent pas la contrainte.

Il y a 2 façons de le réparer:

  • nettoyer les données existantes avant d'ajouter la contrainte
  • ajoutez la contrainte avec l'option "WITH NOCHECK", cela empêchera le serveur sql de vérifier les données existantes, seules les nouvelles données seront vérifiées
1
Shiraz Bhaiji

Dans mysql, j'ai pu réaliser avec la requête suivante

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

1
Chokho