Verklaring invoegen met de Buitenlandse Key Constraint – SQL Server

Ik krijg de volgende fout. Kun je me alsjeblieft helpen?

MSG 547, Niveau 16, Staat 0, Lijn 1
De invoegverklaring in strijd met de Buitenlandse Key Constraint “FK_SUP_ITEM_SUP_ITEM_CAT”. Het conflict vond plaats in database “Dev_Bo”, tafel “dbo.sup_item_cat”. De verklaring is beëindigd.

code:

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

De laatste kolom client_idveroorzaakt de fout. Ik probeerde de waarde te plaatsen die al bestaat in de dbo.Sup_Item_Catin de kolom, die overeenkomt met de sup_item .. maar geen vreugde: – (


Antwoord 1, Autoriteit 100%

in uw tabel dbo.Sup_Item_Cat, het heeft een buitenlandse sleutelreferentie naar een andere tabel. De manier waarop een FK werkt is dat het geen waarde kan hebben in die kolom die zich niet ook in de kolom Primaire sleutel van de tabel met name bevindt.

Als u SQL Server Management Studio hebt, open hem en sp_helpdbo.Sup_Item_Cat‘. Zie welke kolom die FK is ingeschakeld en welke kolom met welke tabel het verwijst. Je plaatst wat slechte gegevens.

Laat me weten of je iets nodig hebt, legt beter uit!


Antwoord 2, Autoriteit 48%

Ik had dit probleem zelf, met betrekking tot het foutbericht dat wordt ontvangen om een ​​buitenlandse sleutelveld te vullen. Ik eindigde op deze pagina in de hoop het antwoord te vinden. Het gecontroleerde antwoord op deze pagina is inderdaad de juiste, helaas, ik heb het gevoel dat het antwoord een beetje onvolledig is voor mensen die niet zo bekend zijn met SQL. Ik ben redelijk geschikt op het schrijven van code, maar SQL-query’s zijn nieuw voor mij, evenals het bouwen van databasetabellen.

Ondanks het gecontroleerde antwoord is correct:

Mike M schreef –

“De manier waarop een FK werkt, is het niet een waarde in die kolom die is
Niet ook in de kolom primaire sleutel van de tabel waarnaar wordt verwezen. “

Wat ontbreekt in dit antwoord is eenvoudig;

U moet de tabel met de primaire sleutel eerst bouwen.

Een andere manier om te zeggen dat het is;

U moet gegevens in de bovenliggende tabel invoegen, met de primaire
Sleutel, voordat u probeert gegevens in te voegen in de kindertafel met
de buitenlandse sleutel.

Kortom, veel van de tutorials lijken over dit feit te beglazen, zodat als je het zelf moest proberen en niet realiseerde, er een bewerkingen was, dan zou je deze foutmelding krijgen. Natuurlijk moeten na het toevoegen van de primaire sleutelgegevens, uw buitenlandse sleutelgegevens in de tafel van de tafel moeten voldoen aan het veld Primaire sleutel in de bovenliggende tabel, anders krijgt u deze foutmelding nog steeds.

Als iemand dit ver lees. Ik hoop dat dit heeft geholpen het gecontroleerde antwoord duidelijker te maken. Ik weet dat er sommigen van jullie zijn die zich misschien voelen dat dit soort dingen vrij eenvoudig is en dat het openen van een boek deze vraag zou hebben beantwoord voordat het werd gepost, maar de waarheid is dat niet iedereen op dezelfde manier leert.


Antwoord 3, Autoriteit 10%

U probeert een record in te voegen met een waarde in de refererende-sleutelkolom die niet voorkomt in de refererende-tabel.

Bijvoorbeeld: als u Boeken en Auteurs-tabellen heeft waarin Boeken een refererende sleutelbeperking heeft voor de Auteurs-tabel en u probeert een boekrecord in te voegen waarvoor er geen auteursrecord is.


Antwoord 4, autoriteit 5%

Je moet je verklaring posten voor meer uitleg. Maar…

Die fout betekent dat de tabel waarin u gegevens invoegt, een refererende-sleutelrelatie heeft met een andere tabel. Voordat gegevens kunnen worden ingevoegd, moet de waarde in het externe sleutelveld moeteerst in de andere tabel voorkomen.


Antwoord 5, autoriteit 2%

Het betekent precies wat het zegt. U probeert een waarde in te voegen in een kolom met een FK-beperking die niet overeenkomt met waarden in de opzoektabel.


Antwoord 6, autoriteit 2%

Ik kreeg ook dezelfde fout in mijn SQL-code, deze oplossing werkt voor mij,


Controleer de gegevens in de primaire tabel Mogelijk voert u een kolomwaarde in die niet aanwezig is in de primaire sleutelkolom.


Antwoord 7, autoriteit 2%

Het probleem ligt niet bij client_id voor zover ik kan zien. Het lijkt er meer op dat het probleem bij de 4e kolom ligt, sup_item_cat_id

Ik zou rennen

sp_helpconstraint sup_item

en let op de kolom constraint_keys die is geretourneerd voor de externe sleutel FK_Sup_Item_Sup_Item_Cat om te bevestigen welke kolom het werkelijke probleem is, maar ik ben er vrij zeker van dat dit niet degene is die u probeert op te lossen. Bovendien ziet ‘123123’ er ook verdacht uit.


Antwoord 8, autoriteit 2%

Ik ontdekte dat alle velden PRECIES overeen moeten komen.

Het verzenden van ‘kattenhond’ is bijvoorbeeld niet hetzelfde als het verzenden van ‘kattenhond’.

Wat ik deed om problemen op te lossen, was om de FK-code van de tabel uit de tabel te scrippen. Ik vond de gegevens in, neem nota van de “Buitenlandse sleutel” die de beperkingen had (in mijn geval er waren er 2) en zorg ervoor dat deze 2 Velden waarden die precies zijn gekoppeld als ze in de tabel waren die de FK-beperkingsfout gooide.

Nadat ik de 2 velden heb gerepareerd die mijn problemen gaf, was het leven goed!

Laat het me weten als je een betere uitleg nodig hebt.


Antwoord 9

  1. SP_HELPCONSTRAINSTRAint
  2. uitvoeren

  3. Let op de kolom Constraint_Keys geretourneerd voor de buitenlandse sleutel

Antwoord 10

Controleer de velden in de relatie waarvoor de buitenlandse sleutel is gedefinieerd. SQL Server Management Studio heeft mogelijk niet de velden die je wilde hebt gekozen als je de relatie hebt gedefinieerd. Dit heeft me in het verleden verbrand.


Antwoord 11

Heerlijk-tabelgegevens die ontbreken, veroorzaakt het probleem.
In uw probleem niet-beschikbaarheid van gegevens in “dbo.sup_item_cat” veroorzaakt het probleem


Antwoord 12

Ik had hetzelfde probleem toen ik code-eerste migraties gebruikte om mijn database te bouwen voor een MVC 5-applicatie. Ik vond uiteindelijk de zaadmethode in mijn configuration.cs-bestand om het probleem te veroorzaken. Mijn zaadmethode maakte een tabelinvoer voor de tabel met de buitenlandse sleutel voordat u het item hebt gemaakt met de bijpassende primaire sleutel.


Antwoord 13

Ik liep dit probleem tegen wanneer mijn velden in de velden velden in de velden en ruimtes bevatten die niet duidelijk waren voor het blote oog. Ik had mijn waardelijst gemaakt in Excel, gekopieerd en plakte het naar SQL en voerde vragen uit om niet-overeenkomsten te vinden op mijn FK-velden.

De qua-query’s van de wedstrijd detecteerde niet dat er geen tabbladen en spaties in mijn FK-veld waren, maar het inzetstuk herkende ze en het bleef de fout genereren.

Ik heb opnieuw getest door de inhoud van het FK-veld in één record te kopiëren en in de insert-query te plakken. Toen ook dat record faalde, bekeek ik de gegevens nader en ontdekte ik uiteindelijk de tabbladen/spaties.

Nadat ik de verwijderde tabbladen/spaties had opgeschoond, was mijn probleem opgelost. Ik hoop dat dit iemand helpt!


Antwoord 14

In mijn geval voegde ik de waarden in de onderliggende tabel in de verkeerde volgorde in

Voor Tabel met 2 kolommen – Kolom1 en Kolom2, kreeg ik deze foutmelding toen ik per ongeluk invoerde:

Insert into Table values('value for column2''value for column1')

Fout opgelost toen ik onderstaande indeling gebruikte:-

Insert into Table (column1, column2) values('value for column2''value for column1')

Antwoord 15

Het probleem was reproduceerbaar en intermitterend bij het gebruik van mybatis.
Ik weet zeker dat ik de juiste DB-configuratie had (PK, FK, automatische verhoging, enz.)
Ik weet zeker dat ik de juiste volgorde van invoegingen had (eerste bovenliggende records), in debug kon ik de bovenliggende record ingevoegd zien met de respectieve PK en net na die volgende instructie mislukte het invoegen van een onderliggende record met de juiste FK erin.

Het probleem is opgelost door voor het opnieuw zaaien van identiteit met

DBCC CHECKIDENT ('schema.customer', RESEED, 0);
DBCC CHECKIDENT ('schema.account', RESEED, 0);

Precies dezelfde code die niet werkte voordat hij begon te werken.
Ik zou graag willen dat iemand me uitlegt wat het probleem veroorzaakte.


Antwoord 16

Als uw FK-kolomtabel die FK-waarde als een primaire sleutelwaarde zou moeten bevatten, worden gegevens ingevoegd.

Other episodes