2009-11-18 8 views
25

Ich versuche, einige Update-Skripte auf meiner Datenbank zu laufen und ich erhalte den folgenden Fehler:SQL mit der FOREIGN KEY-Einschränkung in Konflikt gerieten

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_UPSELL_DT_AMRNO_AFMKTG_REF". The conflict occurred in database "ECOMVER", table "dbo.AFFILIATE_MKTG_REF", column 'AMRNO'.

Ich verwende das folgende Skript:

ALTER TABLE [dbo].[UPSELL_DATA] WITH CHECK ADD 
     CONSTRAINT [FK_UPSELL_DT_AMRNO_AFMKTG_REF] FOREIGN KEY 
     (
      [AMRNO] 
     ) REFERENCES [dbo].[AFFILIATE_MKTG_REF] (
      [AMRNO] 
     ) 
GO 

AMRNO ist eine PK in Tabelle AFFILIATE_MKTG_REF.

Außerdem habe ich versucht, die Fremdschlüsselbeziehung mit der Option Tabelle ändern in SQL Management Studio zu erstellen, und ich habe den gleichen Fehler. Ich bin mir nicht sicher, wonach ich suchen sollte?

Alle Vorschläge würden sehr geschätzt werden.

+2

Durch Hinzufügen von WITH NOCHECK konnte ich die FK-Relation erstellen. Dies scheint nicht das Richtige zu tun ... –

+4

Dies wird im Grunde die Einschränkung "nicht vertrauenswürdig" machen (http://www.mssqltips.com/tip.asp?tip=1539) - im Grunde, dies wird nicht überprüft Stellen Sie sicher, dass die Einschränkung für Daten gilt, die bereits in den Tabellen vorhanden sind, und stattdessen nur nach neu eingefügten Datensätzen suchen. – chadhoc

Antwort

68

Sie haben wahrscheinlich Datensätze in Ihrer Tabelle [dbo]. [UPSELL_DATA] mit Werten in der Spalte [AMRNO], die nicht in der Tabelle [dbo]. [AFFILIATE_MKTG_REF], Spalte [AMRNO] vorhanden sind. Versuchen Sie, eine Abfrage wie folgt diejenigen zu finden, die keine passenden Datensätze:

select * 
from  [dbo].[UPSELL_DATA] u 
left join [dbo].[AFFILIATE_MKTG_REF] m 
on  u.AMRNO = m.AMRNO 
where m.AMRNO is null 
+0

Hallo Tschad, Danke für die Antwort. Ja, es gibt drei Datensätze, die von Ihrer Abfrage zurückgegeben werden. Müssen diese Datensätze entfernt werden, bevor ich den FK erstelle? –

+2

Wenn Sie eine vertrauenswürdige Einschränkung erstellen möchten, müssen Sie sie entweder aus der Tabelle UPSELL_DATA löschen oder zugehörige Einträge in der Tabelle AFFILIATE_MKTG_REF für die angegebenen IDs erstellen. Die einzige andere Option wäre, eine nicht vertrauenswürdige Einschränkung beizubehalten/zu erstellen, wie im obigen Link (und hier http://www.mssqltips.com/tip.asp?tip=1539) beschrieben. – chadhoc

+3

Das ist richtig. 5 Jahre SQL und ich konnte heute nicht herausfinden, wo mein Kaffee ist. –

0

Ich glaube, Sie Daten durch Fremdschlüssel Versuch beschränkt haben, die Daten auf beiden Tabellen zu überprüfen, bevor ein Fremdschlüssel zuweisen, ob es Einschränkungen auf beiden Tischen.

Verwandte Themen