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

Como retornar todas as restrições de verificação não confiáveis ​​no SQL Server (exemplo T-SQL)


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

Por "não confiável", estou me referindo àquelas restrições que têm seu is_not_trusted sinalizador definido como 1 .


Exemplo 1 – Retornar apenas restrições de verificação não confiáveis


Esta consulta retorna apenas o CHECK não confiável restrições no banco de dados atual.
SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled,
  definition
FROM sys.check_constraints
WHERE is_not_trusted = 1;

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

Essa consulta retorna o nome da restrição, o nome da tabela à qual ela é aplicada e a definição da restrição.

Ele também retorna o is_disabled coluna. Isso nos diz se a restrição está ou não habilitada ou desabilitada. Isso pode ser importante saber, porque uma restrição pode ser habilitada, mas não confiável ao mesmo tempo.

Ele consulta as sys.check_constraints visão do sistema. Sabemos que ele só retorna restrições não confiáveis ​​porque o WHERE cláusula especifica apenas linhas que têm o is_not_trusted coluna definida como 1 .

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

Exemplo 2 – Retornar status de confiança


Aqui está novamente, mas desta vez eu troco a definition coluna com o is_not_trusted coluna:
SELECT 
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled,
  is_not_trusted
FROM sys.check_constraints
WHERE is_not_trusted = 1;

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

Provavelmente é supérfluo incluir o is_not_trusted coluna, mas pelo menos ajuda a reiterar o fato de que uma restrição habilitada ainda pode não ser confiável.

Exemplo 3 – 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 não confiáveis):
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             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 1             | 1                |
+----------------+-----------------+---------------+------------------+

Para uma discussão detalhada (e exemplos) do is_not_trusted sinalizador, consulte o que você deve saber sobre WITH NOCHECK ao habilitar uma restrição CHECK no SQL Server.