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

Como retornar todas as restrições CHECK desabilitadas no SQL Server (exemplo T-SQL)


Se você precisar retornar uma lista de todos os CHECK restrições que foram desabilitadas em um banco de dados SQL Server, você pode executar o código T-SQL abaixo.


Exemplo 1 - Restrições de VERIFICAÇÃO desativadas apenas para retorno


Esta consulta retorna apenas o CHECK desabilitado restrições no banco de dados atual. Ele retorna o nome da restrição, o nome da tabela à qual é aplicada e a definição da restrição.
SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  definition
FROM sys.check_constraints
WHERE is_disabled = 1;

Resultado:
+----------------+-----------------+-------------------------------+
| Table          | Constraint      | definition                    |
|----------------+-----------------+-------------------------------|
| ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate])      |
| Occupation     | chkJobTitle     | ([JobTitle]<>'Digital Nomad') |
+----------------+-----------------+-------------------------------+

Isso consulta as sys.check_constraints visão do sistema. Sabemos que ele só retorna restrições desabilitadas porque o WHERE cláusula especifica apenas linhas que têm o is_disabled coluna definida como 1 .

Se você deseja retornar todos os habilitados CHECK restrições, basta alterar o 1 para 0 .

Exemplo 2 – Retornar todas as restrições CHECK


A consulta a seguir retorna todos CHECK restrições para o banco de dados atual (não apenas os desabilitados). Desta vez eu retorno o is_disabled coluna para demonstrar de onde a consulta anterior obteve seu valor:
SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Resultado:
+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 0                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Também incluí o is_not_trusted coluna nesta consulta. É prudente estar atento a esse valor, porque uma restrição pode permanecer não confiável mesmo depois de ser reativada. Para obter uma discussão detalhada (e exemplos) desse sinalizador, consulte O que você deve saber sobre WITH NOCHECK ao habilitar uma restrição CHECK no SQL Server.