Na základě vašich příkladů jsem také zkusil:
- Zrušte a znovu vytvořte cizí klíč.
- Uvolněte a znovu vytvořte stůl.
Pak jsem si všiml něčeho v příkazu:
NOT FOR REPLICATION
Zdá se, že pokud je omezení vytvořeno pomocí NOT FOR REPLICATION, není vždy důvěryhodné.
Citace z Knihy online :
Vypadá to jako IS_NOT_TRUSTED
nastavení je relevantní pouze pro replikaci ovlivněno IS_NOT_FOR_REPLICATION
. Myslím, že pokud je omezení vynuceno na serveru, na kterém pracujete, mělo by to být v pořádku. Tak jsem pokračoval a potvrdil to:
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.
Pokud stále chcete vidět IS_NOT_TRUSTED = 0
pro klid stačí znovu vytvořit cizí klíč bez NOT FOR REPLICATION
.
V případě, že by vás to zajímalo, ověřil jsem stejný účinek i na omezení CHECK.