Répondre

61

Étant donné que la table2 a une clé primaire composite (FileID, FileType), toute référence à celle-ci doit également inclure les deux colonnes.

ALTER TABLE dbo.Table1 
    ADD CONSTRAINT FK_Table1_Table2 
    FOREIGN KEY(FileID, FileType) REFERENCES Table2(FileID, FileType) 

Sauf si vous avez une contrainte/index unique sur le terrain Table2.FileID (mais si oui: pourquoi est-ce pas le PK ??), vous ne pouvez pas créer une relation FK à une partie seulement du PK sur la cible table - ne peut tout simplement pas le faire.

+1

Est-ce standard SQL ou seulement pour MS SQL Server? – Jus12

+2

@ Jus12: c'est la norme SQL –

+0

Mais Table1 n'a pas de colonne "FileType", voulez-vous dire qu'il devrait ajouter une colonne à Table1 uniquement dans le but de créer la contrainte? – BornToCode

3

marc a déjà donné une assez bonne réponse. Si les lignes dans le tableau 1 ne jamais se rapportent à un type de fichier (par exemple filetype « ABC »), vous pouvez ajouter FileType à Table1 comme colonne calculée:

ALTER TABLE Table1 ADD FileType as 'ABC' 

que vous pouvez ensuite utiliser la clé étrangère.

Questions connexes