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.