Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Retornar todas as restrições desabilitadas no SQL Server (exemplo T-SQL)


Aqui está um código T-SQL que você pode usar para obter uma lista de todas as restrições CHECK e de chave estrangeira em um banco de dados SQL Server.



No exemplo a seguir, faço um UNION em duas consultas de banco de dados. Uma consulta sys.foreign_keys para chaves estrangeiras desabilitadas e as outras consultas sys.check_constraints para restrições CHECK desabilitadas.
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;

Resultado:
+----------+------------------+--------------------+------------------------+---------------+------------------+
| 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                |
+----------+------------------+--------------------+------------------------+---------------+------------------+

Estes são os resultados que recebo em um dos meus bancos de dados de teste em meu ambiente de desenvolvimento. Isso retorna todas as restrições de chave estrangeira e CHECK desabilitadas no banco de dados atual. Para verificar outro banco de dados, basta alternar para esse banco de dados e executá-lo lá.

Observe que quando você desabilita uma restrição, o is_not_trusted sinalizador está definido como 1 , e a restrição é considerada não confiável. Ao reativar a restrição, você tem a opção de redefini-la como confiável ou deixá-la como não confiável. Para obter mais informações sobre como restaurar a confiança em uma restrição, consulte Como restaurar a confiança em uma restrição de chave estrangeira no SQL Server e O que você deve saber sobre WITH NOCHECK ao habilitar uma restrição CHECK no SQL Server.