2011-03-13 16 views
24

Estoy tratando de agregar una clave externa a una mesa, y me da el siguiente error:La adición de clave externa, SQL Server 2008

There are no primary or candidate keys in the referenced table 'tbl_Person' that match the referencing column list in the foreign key 'P_ID'.

Tengo un tbl_Person, que se define como:

P_ID INT (Primary Key) 
f_Name, 
l_Name 

la otra mesa es una mesa de comentarios que se define como:

C_ID INT, 
Comments, 
P_ID (should be the foreign key) 

Tratando de hacer una mesa de uno a muchos relación, así que cuando el el usuario agrega un comentario, se le hace referencia, también puede agregarlo a los comentarios sin inicializar un nuevo comentario. Espero que tenga un poco de sentido.

Ejemplo: Randy Bing escribe "Me encanta SQL", su ID es 1, f_Name es Randy, l_Name es Bing, sus comentarios son "I love Sql". Sus comentarios deben almacenar una identificación única, así como importar su P_ID.

Más tarde cuando Randy quiere agregar al comentario con el mismo C_ID donde P_ID lo combina sin crear un nuevo C_ID.

Aquí está el código:

ALTER TABLE tbl_Comments 
ADD CONSTRAINT P_ID 
FOREIGN KEY (P_ID) 
REFERENCES tbl_Person(P_ID) 

Am cierro a estar en el camino correcto?

+0

¿Qué SQL estás usando por favor? – gbn

+0

T-SQL (SQL SERVER 2008) – jpavlov

+0

El código de formato de llaves, ya sabes – gbn

Respuesta

72

Este error generalmente significa que los tipos de datos son diferentes entre los "Comentarios" y "Persona", suponiendo que esto es el mensaje real

El SQL debe estar presente

ALTER TABLE tbl_Comments WITH CHECK ADD 
CONSTRAINT FK_Comments_Person FOREIGN KEY (P_ID) REFERENCES tbl_Person (P_ID) 

Esto coincide con lo que ha añadido. Por lo tanto:

  • tipos de datos de verificación son tanto int
  • garantizar P_ID es clave principal en tbl_Person
  • (Editar, dic 2011) el cotejo y la longitud debe ser el mismo para las columnas varchar demasiado
+0

Gracias que funcionó, también lo ejecuté la primera vez que pateó un error, entonces recordé que olvidé guardar la tabla después de configurar el Primary Clave ... Gracias. – jpavlov

+1

@jpavlov, si la respuesta de @gbn resolvió su problema, debe aceptarlo como la respuesta correcta. (Haga clic en la marca de verificación debajo del recuento de votos). –

4

En el Explorador de objetos, conéctese a una instancia de Motor de base de datos.

En la barra Estándar, haga clic en Nueva consulta.

El ejemplo crea una clave externa en la columna TempID y hace referencia a la columna SalesReasonID en la tabla Sales.SalesReason.

USE AdventureWorks2012; 
    GO 
    ALTER TABLE Sales.TempSalesReason 
    ADD CONSTRAINT FK_TempSales_SalesReason FOREIGN KEY (TempID) 
    REFERENCES Sales.SalesReason (SalesReasonID) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
    ; 
    GO 
Cuestiones relacionadas