2009-12-16 3 views
1

Je tente de créer une contrainte de clé étrangère composée d'une colonne int et d'une colonne datetime (toutes deux non nulles).Problème de clé étrangère SQL Server

Je reçois l'erreur "Il n'y a aucune clé primaire ou candidate dans la table référencée X qui correspond à la liste de colonnes de référence dans la clé étrangère FK".

Normalement, cette erreur signifie que la ou les colonnes de la table cible ne sont pas uniques. Cependant, c'est la clé primaire, donc c'est vraiment unique.

La table référencée par la clé étrangère est partitionnée sur plusieurs groupes de fichiers, tandis que la table sur laquelle la clé étrangère est créée réside sur le groupe de fichiers principal. Est-ce que ceci pourrait être le problème? Les datetimes peuvent-elles faire partie d'une clé étrangère?

Tableau X:

LineId (int not null) (PK) 
CreatedAt (datetime not null) (PK) 
Message (nvarchar(max)) 
userId (int not null) 

Tableau Y:

LineId (int not null) (PK) (FK) 
SId (int not null) (PK) 
LineCreatedAt (datetime not null) (FK) 
CreatedAt (datetime not null) 

commande SQL:

ALTER TABLE Y 
ADD CONSTRAINT [FK1] 
FOREIGN KEY(LineId,LineCreatedAt) 
REFERENCES X(LineId, CreatedAt) 

Toutes les idées appréciées.

Merci

+0

Est-il possible de nous montrer votre schéma de table? – Graviton

+0

Je me demande si c'est parce que les index de la table X sont sur un schéma de partition alors que les Y de la table ne le sont pas? – Chris

Répondre

0

Non, l'erreur que vous recevez ne signifie pas que les colonnes ne sont pas uniques. Cela signifie que les colonnes auxquelles vous faites référence ne correspondent pas aux colonnes de votre table externe. Pouvez-vous afficher les 2 tables et votre définition FK?

0

J'ai testé cela dans l'édition SQL2005 Dev, avec les deux tables X et Y créées sur le groupe de fichiers PRIMARY. Je n'ai eu aucun problème (comme je le soupçonnais) à créer la clé étrangère que vous décrivez. Je doute aussi (mais je suis beaucoup moins sûr de) que le fait d'avoir partitionné la table sur plusieurs groupes de fichiers devrait affecter ceci de cette manière.

Pouvez-vous s'il vous plaît fournir le SQL que vous avez utilisé pour créer vos tables? Cela peut vous éclairer sur la cause de vos problèmes, en particulier si certains paramètres de Wierd sont actifs (et SQL Server est rempli de paramètres wierd.)

0

Apparemment, le problème résidait dans l'ordre des colonnes dans les clés. Depuis la clé primaire de la table X était (CreatedAt, LineID), changer le script:

ALTER TABLE Y 
ADD CONSTRAINT [FK1] 
FOREIGN KEY(LineCreatedAt,LineId) 
REFERENCES X(CreatedAt,LineId) 

a travaillé avec succès. Une mauvaise erreur à faire, mais en regardant l'explorateur d'objet, vous ne voyez que les colonnes clés, pas leur ordre dans la clé.

Questions connexes