Respuesta

61

Dado que Table2 tiene una clave primaria compuesta (FileID, FileType), cualquier referencia a ella también debe incluir ambas columnas.

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

A menos que tenga una restricción única/índice en el campo Table2.FileID (pero si es así, ¿por qué no es este el PK ??), no se puede crear una relación FK únicas partes del PK en el objetivo mesa - simplemente no puedo hacerlo.

+1

¿Es este SQL estándar o solo para el servidor MS SQL? – Jus12

+2

@ Jus12: eso es SQL estándar –

+0

Pero la Tabla 1 no tiene una columna "Tipo de archivo", ¿quiere decir que debería agregar una columna a la Tabla 1 únicamente con el propósito de crear la restricción? – BornToCode

3

marc ya ha dado una muy buena respuesta. Si las filas de la Tabla 1 sólo se refieren siempre a un tipo de archivo (por ejemplo, tipo de archivo 'ABC'), entonces se puede añadir FileType a la Tabla 1 como una columna calculada:

ALTER TABLE Table1 ADD FileType as 'ABC' 

que luego se puede utilizar en la clave externa.

Cuestiones relacionadas