Bagikan melalui


MSSQLSERVER_1785

Berlaku untuk: SQL Server

Detail

Atribut Nilai
Nama Produk SQL Server
ID Peristiwa 1785
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis CRTFKINVTOPO
Teks Pesan Memperkenalkan batasan KUNCI ASING '%.ls' pada tabel '%.ls' dapat menyebabkan siklus atau beberapa jalur kaskade. Tentukan ON DELETE NO ACTION atau ON UPDATE NO ACTION, atau ubah batasan KUNCI ASING lainnya.

Penjelasan

Anda menerima pesan kesalahan ini karena di SQL Server, tabel tidak dapat muncul lebih dari satu kali dalam daftar semua tindakan referensial bertingkat yang dimulai oleh DELETE pernyataan atau UPDATE . Pohon tindakan referensial bertingkat hanya boleh memiliki satu jalur ke tabel tertentu pada pohon tindakan referensial berjentai.

Pesan kesalahan seperti berikut ini dilaporkan kepada pengguna:

Server: Msg 1785, Level 16, State 1, Line 1 Memperkenalkan batasan FOREIGN KEY 'fk_two' pada tabel 'table2' dapat menyebabkan siklus atau beberapa jalur bertingkat. Tentukan ON DELETE NO ACTION atau ON UPDATE NO ACTION, atau ubah batasan KUNCI ASING lainnya. Server: Msg 1750, Tingkat 16, Status 1, Baris 1 Tidak dapat membuat batasan. Lihat kesalahan sebelumnya

Tindakan pengguna

Untuk mengatasi masalah ini, buat kunci asing yang akan membuat satu jalur ke tabel dalam daftar tindakan referensial berjenjang.

Anda dapat menerapkan integritas referensial dalam beberapa cara. Integritas Referensial Deklaratif (DRI) adalah cara paling mendasar, tetapi juga merupakan yang paling tidak fleksibel. Jika Anda membutuhkan lebih banyak fleksibilitas, tetapi Anda masih menginginkan integritas tingkat tinggi, Anda dapat menggunakan pemicu sebagai gantinya.

Informasi selengkapnya

Contoh kode berikut adalah contoh upaya pembuatan KUNCI ASING yang menghasilkan pesan kesalahan:

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.

Lihat juga

Integritas Referensial Bertingkat