Adición de Clave Externa, SQL SERVER 2008


Estoy tratando de agregar una clave foránea a una tabla, y me da el siguiente error:

No hay claves primarias o candidatas en la tabla referenciada 'tbl_Person' que coincidan con la lista de columnas de referencia en la clave externa 'P_ID'.

Tengo un tbl_Person, que se define como:

P_ID INT (Primary Key)
f_Name,
l_Name

La otra tabla es una tabla de comentarios que se define como:

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

Tratando de hacer una tabla de relación de uno a muchos, por lo que cuando el usuario agrega un comentario, es referenciado de nuevo a él, también, puede agregar a los comentarios sin inicializar un nuevo comentario. Espero que tenga un poco de sentido.

Ex: Randy Bing ingrese "I love SQL", su ID es 1, f_Name es Randy, l_Name es Bing, sus comentarios son "I love Sql". Sus comentarios deben almacenar un ID único, así como importar su P_ID.

Más tarde, cuando Randy quiere añadir en el comentario con el mismo C_ID donde P_ID coincide con él 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)

Estoy cerca de estar en el camino correcto?

Author: gbn, 2011-03-13

2 answers

Este error generalmente significa que los tipos de datos son diferentes entre" Comments "y" Person", asumiendo que este es el mensaje real

El SQL debe ser este

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 agregaste. Entonces:

  • los tipos de datos de comprobación son ambos int
  • asegúrese de que P_ID es la clave principal en tbl_Person
  • (Edit, Dic 2011) la intercalación y la longitud deben ser las mismas para las columnas varchar también
 73
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-06 13:36:26

En el Explorador de objetos, conéctese a una instancia de Database Engine.

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

El ejemplo crea una clave foránea en la columna TempID y hace referencia a la columna SalesReasonID en las Ventas.SalesReason mesa.

  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
 4
Author: GANI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-14 17:59:58