Ecco del codice T-SQL che puoi utilizzare per ottenere un elenco di tutti i vincoli CHECK e di chiave esterna in un database di SQL Server.
Nell'esempio seguente, eseguo un UNION
su due query di database. Uno interroga sys.foreign_keys
per chiavi esterne disabilitate e le altre query sys.check_constraints
per i vincoli CHECK disabilitati.
SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', type_desc, is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1 UNION SELECT SCHEMA_NAME(schema_id), OBJECT_NAME(parent_object_id), name, type_desc, is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_disabled = 1;
Risultato:
+----------+------------------+--------------------+------------------------+---------------+------------------+ | Schema | Table | Constraint | type_desc | is_disabled | is_not_trusted | |----------+------------------+--------------------+------------------------+---------------+------------------| | dbo | BandMember | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 1 | 1 | | dbo | City | FK_City_Country | FOREIGN_KEY_CONSTRAINT | 1 | 1 | | dbo | MembershipPeriod | chkValidEndDate | CHECK_CONSTRAINT | 1 | 1 | +----------+------------------+--------------------+------------------------+---------------+------------------+
Questi sono i risultati che ottengo su uno dei miei database di test nel mio ambiente di sviluppo. Ciò restituisce tutte le chiavi esterne disabilitate e i vincoli CHECK nel database corrente. Per controllare un altro database, passa semplicemente a quel database ed eseguilo lì.
Nota che quando disabiliti un vincolo, is_not_trusted
flag è impostato su 1
e il vincolo è considerato non attendibile. Quando riabiliti il vincolo, hai la possibilità di reimpostarlo su attendibile o lasciarlo come non attendibile. Per ulteriori informazioni sul ripristino dell'attendibilità in un vincolo, vedere Come ripristinare l'attendibilità in un vincolo di chiave esterna in SQL Server e Cosa dovresti sapere CON NOCHECK quando si abilita un vincolo CHECK in SQL Server.