sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo hacer que las restricciones de clave externa sean confiables?

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.