2010-09-28 16 views
8

Ho appena appreso, con mia grande sorpresa, che i vincoli di chiave esterna possono essere non fidati. Ciò si verifica quando viene aggiunto un vincolo utilizzando WITH NOCHECK. Quando un vincolo non è affidabile, non viene utilizzato da Query Analyzer per la generazione del piano di query.Vincoli non attendibili

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

mia domanda è questa. Quando un vincolo non è attendibile, c'è una proprietà sul vincolo che posso ispezionare che mi dice questo? Immagino di poter verificare se il vincolo è stato aggiunto utilizzando WITH NOCHECK, ma ci sono altri modi in cui un vincolo può essere contrassegnato come non attendibile?

risposta

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 accessibile tramite la funzione OBJECTPROPERTY.

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