Въз основа на вашите примери аз също опитах:
- Премахнете и създайте отново външния ключ.
- Премахнете и създайте отново таблицата.
Тогава забелязах нещо в командата:
NOT FOR REPLICATION
Изглежда, че ако ограничение е създадено с NOT FOR REPLICATION, то винаги няма доверие.
Цитирам от Книги онлайн :
Изглежда като IS_NOT_TRUSTED
настройката е подходяща само за репликация повлиян от IS_NOT_FOR_REPLICATION
. Предполагам, че докато ограничението е наложено на сървъра, на който работите, трябва да е наред. Така че продължих и го потвърдих:
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.
Ако все още искате да видите IS_NOT_TRUSTED = 0
за спокойствие, просто създайте външния ключ без NOT FOR REPLICATION
.
В случай, че тези от вас се чудят, проверих същия ефект и върху ограниченията CHECK.