64 votes

SQL Server 2008: les colonnes de la table ne correspondent pas à une clé primaire existante ni à une contrainte unique

J'ai besoin de faire quelques changements à un Serveur SQL server 2008 de la base de données.

Cela nécessite la création d'une nouvelle table, et l'insertion d'une clé étrangère dans la nouvelle table qui référence la clé Primaire d'une table existante. Je tiens donc à établir une relation entre mon nouveau tblTwo, qui fait référence à la clé primaire de tblOne.

Cependant, quand j'ai essayé de le faire (à l'aide de SQL Server Management Studio) j'ai eu l'erreur suivante:

Les colonnes dans la table 'tblOne" ne pas correspondre à un existant ou de clé primaire La contrainte UNIQUE

Je ne suis pas vraiment sûr de ce que cela signifie, et je me demandais si il y avait moyen de contourner cela?

92voto

Damien_The_Unbeliever Points 102139

Cela signifie que la clé primaire dans tblOne n'a pas été correctement déclarées - vous besoin d'aller à tblOne et ajouter la contrainte de CLÉ PRIMAIRE en arrière sur elle.

Si vous êtes sûr que tblOne a une contrainte de CLÉ PRIMAIRE, alors peut-être il y a plusieurs tblOne tables dans votre base de données, appartenant à des schémas différents, et vos références clause dans votre FK contrainte est de choisir la bonne.

Si il y a une clé composite (ce que votre observation indique), alors vous devez inclure à la fois les colonnes de votre référence de clé étrangère également. Notez qu'une table ne peut pas avoir plusieurs clés primaires - mais si il y a une clé composite, vous verrez une icône en forme de clé à côté de chaque colonne fait partie de la clé primaire.

61voto

alanh Points 342

Si vous avez une clé composite, l'ordre est important lors de la création d'un FK, et parfois l'ordre n'est pas comme il est affiché.

Ce que je fais est d'aller à la section Keys de la table1 et sélectionnez la clé primaire du script comme créer dans le presse-papiers, puis créez FK en utilisant l'ordre indiqué dans le script

5voto

Ruan Points 508

Si vous obtenez toujours cette erreur après avoir suivi tous les conseils donnés dans les réponses ci-dessus, tout se passe bien.

Une façon de résoudre ce problème consiste à supprimer vos clés primaires pour les deux tables, à enregistrer, actualiser et à les ajouter à nouveau. Ensuite, essayez d'ajouter à nouveau votre relation.

5voto

100r Points 577

J'ai eu cette situation qui m'a amené à ce sujet. Même erreur mais une autre cause. Cela aidera peut-être quelqu'un.

 Table1
ColA (PK)
ColB (PK)
ColC


Table2
ID (PK)
ColA
COLB
 

En essayant de créer une clé étrangère dans la Table2, j'ai choisi les valeurs de la liste déroulante dans l'ordre inverse.

 Table1.ColB = Table2.ColB
Table1.ColA = Table2.ColA
 

Cela me jetait une erreur comme dans le nom du sujet. Création de FK en conservant l'ordre des colonnes dans la table de clés primaires telles qu'elles sont, les erreurs disparaissent.

Stupide, mais .. :)

2voto

Cette question m'a surpris, j'ajoutais la relation sur la mauvaise table. Donc, si vous essayez d'ajouter une relation dans la table A à la table B, essayez d'ajouter la relation dans la table B à la table A.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X