web-dev-qa-db-fra.com

Ajout de clé étrangère, SQL Server 2008

J'essaie d'ajouter une clé étrangère à une table et cela me donne l'erreur suivante:

Il n'y a pas de clé primaire ou candidate dans la table référencée 'tbl_Person' correspondant à la liste de colonnes de référence dans la clé étrangère 'P_ID'.

J'ai un tbl_Person, qui est défini comme:

P_ID INT (Primary Key)
f_Name,
l_Name

l'autre table est une table de commentaires définie comme suit:

C_ID INT,
Comments,
P_ID (should be the foreign key)

Essayer de créer une table de relations un à plusieurs. Ainsi, lorsque l'utilisateur ajoute un commentaire, celui-ci lui est référencé. Il peut également ajouter des commentaires sans initialiser un nouveau commentaire. Espérons que cela a un sens.

Ex: Randy Bing entrez "I love SQL", son identifiant est 1, f_Name est Randy, l_Name est Bing, ses commentaires sont "I love Sql". Ses commentaires doivent stocker un identifiant unique et importer son identifiant P_ID. 

Plus tard, quand Randy voudra ajouter un commentaire avec le même C_ID, P_ID lui correspond sans créer de nouveau C_ID.

Voici le code:

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID)

Suis-je sur le point d'être sur la bonne voie?

27
jpavlov

Cette erreur signifie généralement que les types de données sont différents entre "Commentaires" et "Personne", en supposant qu'il s'agisse du message

Le SQL devrait être ceci

ALTER TABLE tbl_Comments WITH CHECK ADD
 CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID)

Cela correspond à ce que vous avez ajouté. Alors:

  • vérifier les types de données sont both int
  • s'assurer que P_ID est la clé primaire sur tbl_Person
  • (Edition, décembre 2011) le classement et la longueur doivent être identiques pour les colonnes varchar
75
gbn

Dans l'Explorateur d'objets, connectez-vous à une instance du moteur de base de données.

Dans la barre standard, cliquez sur Nouvelle requête.

L'exemple crée une clé étrangère dans la colonne TempID et référence la colonne SalesReasonID dans la table Sales.SalesReason.

  USE AdventureWorks2012;
  GO
  ALTER TABLE Sales.TempSalesReason 
  ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
  REFERENCES Sales.SalesReason (SalesReasonID) 
  ON DELETE CASCADE
  ON UPDATE CASCADE
  ;
  GO
4
GANI

le nom de votre contrainte, p_id, entre en conflit avec le nom de la colonne p_id

0
undisclosed