Berdasarkan contoh Anda, saya juga telah mencoba:
- Lepaskan dan buat ulang kunci asing.
- Lepaskan dan buat ulang tabel.
Kemudian saya melihat sesuatu dalam perintah:
NOT FOR REPLICATION
Tampaknya jika kendala dibuat dengan NOT FOR REPLICATION, selalu tidak dipercaya.
Mengutip dari Buku Online :
Sepertinya IS_NOT_TRUSTED
pengaturan hanya relevan untuk replikasi dipengaruhi oleh IS_NOT_FOR_REPLICATION
. Saya kira selama batasan diberlakukan di server tempat Anda bekerja, itu akan baik-baik saja. Jadi saya melanjutkan dan mengonfirmasinya:
SELECT name, is_disabled, is_not_trusted
FROM sys.foreign_keys
WHERE name = 'FK_Product_ProductKeyId'
name is_disabled is_not_trusted
FK_Product_ProductKeyId 0 1
INSERT INTO dbo.Sale VALUES (2, GETDATE(), 1.00)
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_ProductKeyId". The conflict occurred in database "_Scratch", table "dbo.Product", column 'ProductKeyId'.
The statement has been terminated.
Jika Anda masih ingin melihat IS_NOT_TRUSTED = 0
untuk ketenangan pikiran, cukup buat ulang kunci asing tanpa NOT FOR REPLICATION
.
Jika Anda bertanya-tanya, saya telah memverifikasi efek yang sama pada batasan CHECK juga.