2010-06-03 44 views
151

Ho ricevuto il seguente errore. Per favore potete aiutarmi?Istruzione INSERT in conflitto con il vincolo FOREIGN KEY

Msg 547, livello 16, stato 0, riga 1
L'istruzione INSERT in conflitto con il vincolo FOREIGN KEY "FK_Sup_Item_Sup_Item_Cat". Il conflitto si è verificato nel database "dev_bo", tabella "dbo.Sup_Item_Cat". La dichiarazione è stata chiusa.

Codice:

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') 

L'ultima colonna client_id sta causando l'errore. Ho provato a inserire il valore già presente nella colonna dbo.Sup_Item_Cat nella colonna corrispondente al sup_item .. ma nessuna gioia :-(

+10

Si è tentato di inserire un record nella tabella degli articoli che non ha un record di categoria corrispondente nella tabella 'Sup_Item_Cat'. Non c'è molto altro da dire al riguardo. –

+1

Quindi stai dicendo che 'SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'' restituisce risultati? –

+2

Anche tu dici "l'ultimo coulum" client_id "sto ottenendo il conflitto". Questo non è ciò che implica il messaggio di errore. Penso che tu stia cercando nel posto sbagliato per il tuo problema. –

risposta

185

Nella tabella dbo.Sup_Item_Cat, ha un riferimento di chiave esterna a un'altra tabella. Il modo in cui un FK funziona è che non può avere un valore in quella colonna che non si trova anche nella colonna della chiave primaria della tabella di riferimento.

Se si dispone di SQL Server Management Studio, aprirlo e sp_help 'dbo.Sup_Item_Cat'. Vedere su quale colonna è attivo FK e su quale colonna di quale tabella fa riferimento. Stai inserendo alcuni dati errati.

Fatemi sapere se avete bisogno di qualcosa spiegato meglio!

+4

Grazie per aver incluso il comando sp_help! Mi ha aiutato a restringere il mio problema simile. –

+0

Infatti, nel mio caso, la proprietà non veniva semplicemente rimandata dalla vista al controller, quindi era sempre 0 (che non era un ID valido, ma il controller non avrebbe modo di saperlo.) – neminem

4

Significa esattamente quello che dice. Stai cercando di inserire un valore in una colonna che ha un vincolo FK su di esso che non corrisponde alcun valore nella tabella di ricerca.

14

Avrai bisogno di pubblicare il tuo estratto conto per ulteriori chiarimenti. Ma ...

Tale errore significa che la tabella l'inserimento di dati in ha una relazione di chiave esterna con un'altra tabella Prima che i dati possano essere inseriti, il valore nel campo chiave esterna deve essere nell'altra tabella primo.

14

Si sta tentando di inserire un record con un valore nella colonna chiave esterna che non esiste nella tabella esterna.

Ad esempio: se si dispone di tabelle Libri e Autori in cui Libri ha un vincolo di chiave esterna nella tabella Autori e si tenta di inserire un record del libro per il quale non esiste alcun record dell'autore.

Tra l'altro, una semplice ricerca su Google ti avrebbe dato la risposta ...

+0

per favore controlla la mia domanda modificata – SmartestVEGA

+2

@Il mio che ha modificato la mia ultima frase. L'ho rimesso. L'ultima affermazione non è "snark", è un link utile a una ricerca su Google che avrebbe restituito la risposta che l'OP stava cercando. Credo ancora in "insegnare a qualcuno a pescare". Un delicato promemoria per diventare autosufficienti potrebbe avere un impatto positivo sull'OP, sui lettori e su questo sito. A mio modesto parere, è sempre meglio esaurire le proprie ricerche prima di chiedere a qualcun altro di passare il tempo a rispondere alla tua domanda. Il fatto che questa domanda ora superi la ricerca di Google è irrilevante. –

6

Il problema non è con client_id da quello che posso vedere. Sembra più come il problema è con il 4 ° colonna, sup_item_cat_id

vorrei correre

sp_helpconstraint sup_item 

e prestare attenzione ai constraint_keys colonna restituita per la FK_Sup_Item_Sup_Item_Cat chiave esterna per confermare quale colonna è il problema reale, ma Sono abbastanza sicuro che non è quello che stai cercando di risolvere. Inoltre '123123' sembra anche sospetto.

3

Controllare due volte i campi nella relazione per cui è stata definita la chiave esterna. SQL Server Management Studio potrebbe non avere i campi che si desidera selezionare quando è stata definita la relazione. Questo mi ha bruciato in passato.

81

Ho riscontrato questo problema, per quanto riguarda il messaggio di errore che si sta tentando di compilare un campo di chiave esterna. Sono finito su questa pagina nella speranza di trovare la risposta. La risposta verificata su questa pagina è effettivamente quella corretta, purtroppo ritengo che la risposta sia un po 'incompleta per le persone che non hanno familiarità con SQL. Sono abbastanza adatto a scrivere codice, ma le query SQL sono nuove per me oltre a creare tabelle di database.

Nonostante la risposta controllato essere corretta:

Mike M wrote-

"Il modo in cui funziona un FK è non può avere un valore in quella colonna che è non anche nella chiave primaria colonna della tabella di riferimento. "

Ciò che manca a questa risposta è semplicemente;

È necessario creare prima la tabella contenente la chiave primaria.

Un altro modo per dirlo;

È necessario inserire i dati nella tabella padre, che contiene il primario chiave, prima di tentare di inserire i dati nella tabella figlio che contiene la chiave esterna.

In breve, molti dei tutorial sembrano essere smaltatura su questo fatto in modo che, se si dovesse provare da soli e non abbiamo capito c'era un ordine delle operazioni, allora si dovrebbe ottenere questo errore. Naturalmente, dopo aver aggiunto i dati della chiave primaria, i dati della chiave esterna nella tabella figlio devono essere conformi al campo della chiave primaria nella tabella padre, altrimenti si otterrà comunque questo errore.

Se qualcuno ha letto fino a qui. Spero che questo abbia aiutato a rendere più chiara la risposta verificata. So che ci sono alcuni di voi che potrebbero ritenere che questo genere di cose sia piuttosto difficile e che aprire un libro avrebbe risposto a questa domanda prima che fosse pubblicato, ma la verità è che non tutti imparano allo stesso modo.

+0

E aggiungo, assicurati di profilare la tua query in quanto non invia sempre ciò che pensi dovrebbe essere nel database. – HLGEM

+0

Grazie per la semplicità ... –

2
  1. corsa sp_helpconstraint
  2. prestare attenzione alla colonna constraint_keys restituito per la chiave esterna
2

Ho avuto lo stesso problema quando ho usato migrazioni code-prima di costruire la mia base di dati per un'applicazione MVC 5. Alla fine ho trovato che il metodo seed nel mio file configuration.cs stava causando il problema. Il mio metodo seed stava creando una voce di tabella per la tabella contenente la chiave esterna prima di creare la voce con la chiave primaria corrispondente.

6

Qualcosa che ho trovato è che tutti i campi devono corrispondere ESATTAMENTE.

Per esempio, l'invio di 'gatto cane' non è la stessa come l'invio di 'catdog'.

Quello che ho fatto per risolvere questo problema è stato quello di scrivere il codice FK dalla tabella in cui inserivo i dati, prendere nota della "Chiave esterna" che aveva i vincoli (nel mio caso c'erano 2) e assicurarsi che quelli 2 valori dei campi corrispondevano ESATTAMENTE come erano nella tabella che stava lanciando l'errore FK Constraint.

Una volta sistemati i 2 campi che davano problemi, la vita era buona!

Se hai bisogno di una spiegazione migliore, fammi sapere.

+0

Questo mi ha davvero aiutato haha! Trascurato questo fatto, risolto un problema che ho avuto! Grazie –

3

i dati della tabella Capogruppo non esistono in modo che provoca il problema.Per la questione di cui sopra, i dati non sono disponibili nella dbo.Sup_Item_Cat tabella"

+1

In che modo la tua risposta, anche se potrebbe non essere sbagliata, fornisce alcune informazioni aggiuntive che non sono già incluse in altre risposte? Prova a rispondere ai post quando puoi avere argomenti validi che non erano ancora completamente coperti da altre risposte. –

3

dati tabella padre manca causa il problema. Nel vostro problema non disponibilità dei dati in "dbo.Sup_Item_Cat" causa il problema

2

Mi sono imbattuto in questo problema quando i miei campi valore di inserimento contenevano schede e spazi che non erano evidenti a occhio nudo.Avevo creato la mia lista valori in Excel, copiata e incollato a SQL ed eseguire interrogazioni per trovare non corrispondenti sui miei campi FK

Le query di corrispondenza non hanno rilevato che c'erano tab e spazi nel mio campo FK, ma INSERT le ha riconosciute e ha continuato a generare l'errore.

Ho eseguito nuovamente il test copiando il contenuto del campo FK in un record e incollandolo nella query di inserimento. Quando anche questo record fallì, guardai più da vicino i dati e finalmente scoprii le schede/gli spazi.

Dopo aver rimosso le schede/gli spazi rimossi, il problema è stato risolto. Spero che questo aiuti qualcuno!

Problemi correlati