risposta

61

Poiché Table2 ha una chiave primaria composita (FileID, FileType), quindi qualsiasi riferimento ad esso deve includere anche entrambe le colonne.

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

A meno che non si dispone di un unico vincolo/indice sul campo Table2.FileID (ma se è così: perché non è questo il PK ??), non è possibile creare un rapporto FK a solo alcune parti del PK sul bersaglio tavolo - non posso farlo

+1

Questo SQL standard o solo per MS SQL Server? – Jus12

+2

@ Jus12: questo è lo standard SQL –

+0

Ma Table1 non ha una colonna "FileType", vuoi dire che dovrebbe aggiungere una colonna a Table1 esclusivamente allo scopo di creare il vincolo? – BornToCode

3

marc ha già dato una buona risposta. Se le righe in Table1 sempre e solo si riferiscono a un tipo di file (ad esempio filetype 'ABC'), quindi è possibile aggiungere FileType a Table1 come una colonna calcolata:

ALTER TABLE Table1 ADD FileType as 'ABC' 

che è quindi possibile utilizzare la chiave esterna.