Chybová zpráva, že. 1785 dojde k vytvoření omezení CIZÍHO klíče může způsobit více cest kaskády

Příznaky

Při vytvoření omezení CIZÍHO klíče, může zobrazit následující chybová zpráva:

Server: Msg. 1785, úroveň 16 stav 1, řádek 1 Úvod cizí klíč omezení "fk_two" v tabulce Tabulka2 způsobit cykly nebo více cest kaskády. Určit při odstranění akce ani na aktualizaci žádná akce nebo upravit další omezení cizí klíč. Server: Msg 1750, úroveň 16, stavu 1, řádek 1 může nelze vytvořit omezení. Viz předchozí chyby.

Příčina

Tato chybová zpráva zobrazí, protože na serveru SQL Server tabulky nemůže objevit více než jednou v seznamu kaskádové referenční akce, které jsou spuštěny pomocí příkazu aktualizace nebo odstranění. Například stromu kaskádové referenční akce musí obsahovat pouze jedna cesta ke konkrétní tabulce stromu kaskádové referenční akce.

Jak potíže obejít

Chcete-li tento problém vyřešit, nevytvářejte cizí klíč, který vytvoří více než jednu cestu do tabulky v seznamu kaskádové referenční akce.

Můžete vynutit referenční integritu několika způsoby. Deklarativní referenční Integrity (DRI) představuje nejzákladnější způsob, ale je to také nejméně flexibilní způsob. Pokud potřebujete větší flexibilitu, ale stále má vysoký stupeň integrity, použijte aktivační události.

Další informace

Následující ukázkový kód je příkladem pokusu o vytvoření cizí klíč, který generuje chybovou zprávu:

Use tempdbgo
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.

ODKAZY

Další informace naleznete v tématu "Kaskádové referenční Integrity omezení" v SQL Server 2000 Books Online.
Vlastnosti

ID článku: 321843 - Poslední kontrola: 16. 1. 2017 - Revize: 2

Váš názor