Quando você tenta inserir dados em uma tabela que tem um
CHECK
totalmente habilitado restrição, você só terá sucesso se os dados não violarem essa restrição. Se você tentar inserir dados inválidos, a operação falhará com um erro. Mas e se você se encontrar na situação em que realmente deve inserir dados que violarão o
CHECK
limitação? Talvez a restrição não se aplique mais, ou talvez você tenha uma exceção em que uma linha tenha permissão para ignorar a restrição. De qualquer forma, você não poderá inserir nada fora das regras da restrição. Se você se encontrar nessa situação, sempre poderá desativar a restrição. Veja como fazer isso usando o Transact-SQL.
Exemplo 1 – Desabilitar a restrição CHECK
Para desabilitar um
CHECK
restrição, use o NOCHECK
argumento dentro de um ALTER TABLE
demonstração. Assim:
ALTER TABLE Occupation NOCHECK CONSTRAINT chkJobTitle;
Este código desabilita uma restrição chamada chkJobTitle .
Exemplo 2 – Revise a restrição CHECK
Podemos consultar as
sys.check_constraints
visão do sistema para verificar se nossa restrição foi desabilitada:SELECT name, is_disabled, is_not_trusted, definition FROM sys.check_constraints;
Resultado:
+-----------------+---------------+------------------+----------------------------------------+ | name | is_disabled | is_not_trusted | definition | |-----------------+---------------+------------------+----------------------------------------| | chkPrice | 0 | 0 | ([Price]>(0)) | | chkValidEndDate | 0 | 0 | ([EndDate]>=[StartDate]) | | chkTeamSize | 0 | 0 | ([TeamSize]>=(5) AND [TeamSize]<=(20)) | | chkJobTitle | 1 | 1 | ([JobTitle]<>'Digital Nomad') | +-----------------+---------------+------------------+----------------------------------------+
Neste caso eu selecionei todos os
CHECK
restrições do banco de dados atual. Podemos ver que este é o único que está desabilitado (porque seu is_disabled coluna está definida como 1 ).
Você pode notar que o is_not_trusted coluna também está definida como 1 . Isso indica que o
CHECK
restrição não foi verificada pelo sistema para todas as linhas. Em outras palavras, não podemos mais assumir que a restrição verificou todos os dados. O fato de a restrição estar desabilitada significa que os dados agora podem entrar no banco de dados sem serem verificados pela restrição. Portanto, existe a possibilidade de dados inválidos estarem presentes no banco de dados.
Se você precisar reativar o
CHECK
restrição, você terá a oportunidade de restaurar a confiança da restrição (usando o WITH CHECK
opção). Isso verificará todas as linhas existentes antes de ativar a restrição. Você também terá a opção de não verificar os dados existentes, mas isso só deve ser feito em casos raros.
Consulte O que você deve saber sobre WITH NOCHECK ao habilitar uma restrição CHECK no SQL Server para obter uma demonstração de como a confiança é afetada, dependendo de como você reativa a restrição.