Basado en sus ejemplos, también he intentado:
- Suelte y vuelva a crear la clave externa.
- Soltar y volver a crear la tabla.
Entonces noté algo en el comando:
NOT FOR REPLICATION
Parece que si se crea una restricción con NOT FOR REPLICATION, siempre no es de confianza.
Citando de Books Online :
Parece que IS_NOT_TRUSTED
la configuración es solo relevante para la replicación influenciado por IS_NOT_FOR_REPLICATION
. Supongo que siempre que la restricción se aplique en el servidor en el que está trabajando, debería estar bien. Así que seguí adelante y lo confirmé:
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.
Si aún desea ver IS_NOT_TRUSTED = 0
para su tranquilidad, simplemente vuelva a crear la clave externa sin NOT FOR REPLICATION
.
En caso de que aquellos de ustedes se estén preguntando, también he verificado el mismo efecto en las restricciones CHECK.