2010-06-03 130 views
151

Recibo el siguiente error. ¿Me podría ayudar?instrucción INSERT en conflicto con la restricción FOREIGN KEY

Msg 547, nivel 16, estado 0, línea 1
La sentencia INSERT en conflicto con la restricción FOREIGN KEY "FK_Sup_Item_Sup_Item_Cat". El conflicto ocurrió en la base de datos "dev_bo", tabla "dbo.Sup_Item_Cat". La instrucción se ha terminado.

Código:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
         status_code, last_modified_user_id, last_modified_timestamp, client_id) 
values (10162425, 10, 'jaiso', '123123', 
     'a', '12', '2010-12-12', '1062425') 

La última columna client_id está causando el error. Traté de poner el valor que ya existe en el dbo.Sup_Item_Cat en la columna, correspondiente al elemento sup .. pero no alegría :-(

+10

Ha intentado insertar un registro en su tabla de artículos que no tiene un registro de categoría coincidente en su tabla 'Sup_Item_Cat'. No hay mucho más que decir al respecto. –

+1

¿Está diciendo que 'SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'' arroja resultados? –

+2

También dices "el último coulum" client_id "estoy recibiendo el conflicto". Esto no es lo que implica el mensaje de error. Creo que está buscando el lugar equivocado para su problema. –

Respuesta

185

En su tabla dbo.Sup_Item_Cat, tiene una referencia de clave foránea a otra tabla. La forma en que funciona un FK es que no puede tener un valor en esa columna que no esté también en la columna de la clave principal de la tabla a la que se hace referencia.

Si tiene SQL Server Management Studio, ábralo y sp_help 'dbo.Sup_Item_Cat'. Vea en qué columna está FK y a qué columna de la tabla hace referencia. Estás insertando algunos datos malos.

¡Avíseme si necesita algo que se explique mejor!

+4

¡Gracias por incluir el comando sp_help! Me ayudó a reducir mi problema similar. –

+0

De hecho, en mi caso, la propiedad simplemente no se enviaba desde la vista al controlador, por lo que siempre era 0 (que no era una identificación válida, pero el controlador no tenía manera de saberlo). – neminem

4

Significa exactamente lo que dice. Está tratando de insertar un valor en una columna que tiene una restricción FK en él que no coincide con cualquiera de los valores en la tabla de búsqueda.

14

tendrá que publicar su estado de cuenta para más aclaración. Pero ...

ese error significa que la tabla que están insertando datos en una relación de clave externa con otra tabla. Antes de que se puedan insertar datos, el valor en el campo de clave externa debe en la otra tabla primero.

14

Está tratando de insertar un registro con un valor en la columna de clave externa que no existe en la tabla externa.

Por ejemplo: si tiene tablas de libros y autores donde Books tiene una restricción de clave externa en la tabla de autores e intenta insertar un registro de libro para el que no hay registro de autor.

Por cierto, una simple búsqueda en Google te habría dado la respuesta ...

+0

compruebe mi pregunta editada – SmartestVEGA

+2

@Iain que editó mi última oración. Lo he devuelto. La última declaración no es "snark", es un enlace útil para una búsqueda en Google que habría arrojado la respuesta que el OP estaba buscando. Todavía creo en "enseñar a alguien a pescar". Un recordatorio suave para ser autosuficiente podría tener un impacto positivo en el OP, los lectores y este sitio. En mi humilde opinión, siempre es mejor agotar su propia investigación antes de pedirle a otra persona que dedique su tiempo a responder su pregunta. El hecho de que esta pregunta ahora encabeza la búsqueda de Google es irrelevante. –

6

El problema no es con client_id de lo que puedo ver. Se parece más el problema está en la cuarta columna, sup_item_cat_id

correría

sp_helpconstraint sup_item 

y prestar atención a los constraint_keys columna devuelta por el FK_Sup_Item_Sup_Item_Cat clave externa para confirmar qué columna es el problema real, pero Estoy bastante seguro de que no es el que estás tratando de arreglar. Además '123123' parece sospechoso también.

3

Revise dos veces los campos en la relación para la cual se define la clave foránea. Es posible que SQL Server Management Studio no haya tenido los campos que quería seleccionados cuando definió la relación. Esto me ha quemado en el pasado.

81

Tuve este problema yo mismo, con respecto al mensaje de error que se recibe al intentar llenar un campo de clave externa. Terminé en esta página con la esperanza de encontrar la respuesta. La respuesta comprobada en esta página es la correcta, lamentablemente siento que la respuesta es un poco incompleta para las personas que no están tan familiarizadas con SQL. Soy bastante apto para escribir código, pero las consultas SQL son nuevas para mí, así como para construir tablas de bases de datos.

A pesar de la respuesta comprobado ser correcta:

Mike M wrote-

"La forma en que funciona un FK es que no puede tener un valor en esa columna que es no también en la clave primaria columna de la tabla referenciada ".

Lo que falta en esta respuesta es simple;

Primero debe compilar la tabla que contiene la clave principal.

Otra forma de decirlo es;

Debe insertar datos en la tabla primaria, que contiene la clave principal , antes de intentar insertar datos en la tabla secundaria que contiene la clave externa.

En resumen, muchos de los tutoriales parecen estar vidriosos este hecho de manera que si se va a tratar por su cuenta y no se dio cuenta que había una orden de operaciones, entonces usted obtiene este error. Naturalmente, después de agregar los datos de la clave primaria, los datos de la clave externa en la tabla secundaria deben ajustarse al campo de la clave principal en la tabla padre; de ​​lo contrario, seguirá recibiendo este error.

Si alguien ha leído hasta aquí. Espero que esto haya ayudado a que la respuesta comprobada sea más clara. Sé que hay algunos de ustedes que pueden sentir que este tipo de cosas es bastante directa y que abrir un libro habría respondido a esta pregunta antes de su publicación, pero la verdad es que no todos aprenden de la misma manera.

+0

Y yo agregaría, asegúrese de perfilar su consulta, ya que no siempre está enviando lo que cree que debería ser a la base de datos. – HLGEM

+0

Gracias por su simplicidad ... –

2
  1. plazo sp_helpconstraint
  2. prestar atención a la columna de constraint_keys devuelto para la clave externa
2

que tenía el mismo problema cuando utilicé migraciones de código primero en construir mi base de datos para una aplicación MVC 5. Eventualmente encontré el método seed en mi archivo configuration.cs para estar causando el problema. Mi método de inicialización creaba una entrada de tabla para la tabla que contenía la clave externa antes de crear la entrada con la clave primaria correspondiente.

6

Algo que encontré fue que todos los campos tienen que coincidir EXACTAMENTE.

Por ejemplo, enviar 'cat dog' no es lo mismo que enviar 'catdog'.

Lo que hice para solucionar esto fue escribir el código FK de la tabla en la que estaba insertando los datos, tomar nota de la "clave externa" que tenía las restricciones (en mi caso eran 2) y asegurarme de que 2 valores de campos coincidentes EXACTAMENTE como estaban en la tabla que arrojaba el error de restricción FK.

¡Una vez que arreglé los 2 campos que daban mis problemas, la vida era buena!

Si necesita una explicación mejor, hágamelo saber. No existen

+0

Esto realmente me ayudó jaja! Pasado por alto este hecho, solucionó un problema que tenía! Gracias –

3

datos de la tabla de Padres por lo que hace que el problema.Para el problema anterior, los datos no están disponibles en la tabla dbo.Sup_Item_Cat"

+1

¿De qué manera su respuesta, aunque no sea incorrecta, aporta información adicional que no está incluida en otras respuestas? Intenta responder las publicaciones cuando puedas tener argumentos válidos que otras respuestas aún no hayan cubierto completamente. –

3

datos de la tabla padre ausente provoca el problema. En su problema de no disponibilidad de datos en "dbo.Sup_Item_Cat" causa el problema

2

Me encontré con este problema cuando mis campos de valores de inserción contenían pestañas y espacios que no eran evidentes a simple vista. Había creado mi lista de valores en Excel, copiada, y pegarlo en SQL y ejecutar consultas para encontrar no coincidencias en mis campos FK.

Las consultas de coincidencia no detectaron pestañas y espacios en mi campo FK, pero el INSERT los reconoció y continuó generando el error.

He probado nuevamente copiando el contenido del campo FK en un registro y pegándolo en la consulta de inserción. Cuando ese registro también falló, miré más de cerca los datos y finalmente detecté las pestañas/espacios.

Una vez que limpié las pestañas/espacios eliminados, mi problema se resolvió. ¡Espero que esto ayude a alguien!

Cuestiones relacionadas