Fehlermeldung, die 1785 tritt auf, wenn Sie eine FOREIGN KEY-Einschränkung erstellen möglicherweise mehrere überlappend Pfade

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 321843 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Möglicherweise wird folgende Fehlermeldung angezeigt, wenn Sie eine FOREIGN KEY-Einschränkung erstellen:
Server: Msg 1785, Ebene 16, Status 1, 1 Einführung in FOREIGN KEY-Einschränkung 'Fk_two' in Tabelle "Tabelle2" kann Zyklen oder mehrere überlappend Pfade verursachen. Geben Sie ON DELETE kein ACTION oder ON UPDATE NO ACTION, oder ändern Sie andere FOREIGN KEY-Einschränkungen. Server: Msg 1750, Ebene 16, Status 1, 1 konnte keine Einschränkung erstellt werden. Finden Sie in vorherige Fehlern.

Ursache

Sie erhalten diese Fehlermeldung, da in SQL Server, eine Tabelle mehr als einmal in einer Liste aller kaskadierenden referenziellen Aktionen erscheinen darf, die durch eine DELETE oder UPDATE-Anweisung gestartet werden. Beispielsweise muss die Struktur der kaskadierenden referenziellen Aktionen nur einen Pfad zu einer bestimmten Tabelle in der cascading referenziellen Aktionen Struktur haben.

Abhilfe

Um dieses Problem zu umgehen, erstellen Sie keinen Fremdschlüssel, der mehr als einen Pfad zu einer Tabelle in einer Liste von kaskadierenden referenziellen Aktionen erstellen.

Sie können referenziellen Integrität auf verschiedene Weise erzwingen. Deklarative referenzielle Integrität (DRI) ist die grundlegendste Art und Weise, aber es ist auch die am wenigsten flexible Weise. Wenn Sie mehr Flexibilität benötigen, aber trotzdem ein hohes Maß an Integrität, können Sie stattdessen Trigger verwenden.

Weitere Informationen

Der folgende Beispielcode ist ein Beispiel für ein Versuch der FOREIGN KEY-Erstellung, die die Fehlermeldung generiert:

Use tempdb
go
create table table1 (user_ID integer not null primary key, user_name
char(50) not null)
go

create table table2 (author_ID integer not null primary key, author_name
char(50) not null, lastModifiedBy integer not null, addedby integer not
null)

go

alter table table2 add constraint fk_one foreign key (lastModifiedby)
references table1 (user_ID) on delete cascade on update cascade
go
alter table table2 add constraint fk_two foreign key (addedby)
references table1(user_ID) on delete no action on update cascade
go
--this fails with the error because it provides a second cascading path to table2.

alter table table2 add constraint fk_two foreign key (addedby)
references table1 (user_ID) on delete no action on update no action
go
-- this works.
				

Informationsquellen

Weitere Informationen finden finden Sie "Cascading referentielle Integrität-Einschränkungen" in der SQL Server 2000-Onlinedokumentation.

Eigenschaften

Artikel-ID: 321843 - Geändert am: Freitag, 2. November 2007 - Version: 3.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Keywords: 
kbmt kbbug kbpending kbprb kbprogramming KB321843 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 321843
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com