2010-09-28 15 views
8

Acabo de enterarme, para mi sorpresa, de que las restricciones de clave externa pueden ser no confiables. Esto ocurre cuando se agrega una restricción usando WITH NOCHECK. Cuando una restricción no es de confianza, el analizador de consultas no la usa para la generación de planes de consulta.Restricciones no de confianza

Ver:
http://sqlblog.com/blogs/hugo_kornelis/archive/2007/03/29/can-you-trust-your-constraints.aspx

Mi pregunta es la siguiente. Cuando una restricción no es confiable, ¿hay alguna propiedad en la restricción que pueda inspeccionar que me diga esto? Supongo que podría verificar si la restricción se agregó utilizando WITH NOCHECK, pero ¿hay otras formas en que una restricción puede marcarse como no confiable?

Respuesta

4
select * 
    from sys.check_constraints 
    where is_not_trusted = 1 

select * 
    from sys.foreign_keys 
    where is_not_trusted = 1 
1

there is a property on the constraint accesible a través de la función OBJECTPROPERTY.

SELECT 
    CASE WHEN OBJECTPROPERTY(OBJECT_ID('FK_TIMECARD_EMPLOYEEID'), 'CnstIsNotTrusted') = 1 
     THEN 'NO' 
     ELSE 'YES' 
     END AS 'IsTrustWorthy?' 
Cuestiones relacionadas