Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Restituisce tutti i vincoli disabilitati in SQL Server (esempio T-SQL)

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.