Você pode usar o código abaixo para desativar todos os
CHECK
e restrições de chave estrangeira para o banco de dados atual no SQL Server. EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Isso usa o
sp_MSforeachtable
não documentado da Microsoft procedimento armazenado. Este procedimento permite que você execute tarefas em cada tabela em um banco de dados. Portanto, é perfeito para nossa tarefa aqui - desativar todos os CHECK
restrições dentro do banco de dados atual. Abaixo está um exemplo onde eu faço isso e depois verifico o resultado.
Exemplo 1 – Revise as restrições
Primeiro, darei uma olhada rápida no
CHECK
atual e restrições de chave estrangeira no banco de dados, para ver se estão ou não habilitadas ou desabilitadas. SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 0 | 0 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 0 | 0 | +----------------+-----------------+---------------+------------------+
Portanto, existem atualmente quatro
CHECK
restrições no banco de dados, para duas tabelas diferentes. Podemos ver que todas as restrições estão habilitadas porque is_disabled está definido como 0 .
Exemplo 2 – Desabilitar as Restrições
Agora vou desabilitar todas as restrições:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Geralmente, é uma boa ideia certificar-se de que você está usando o banco de dados correto ao fazer coisas como essa. Assim, poderíamos adicionar ao código acima mudando explicitamente para o banco de dados correto:
USE Test; EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Neste caso, mudo para um banco de dados chamado Test .
Exemplo 3 – Verifique o resultado
Tendo executado o código acima, agora executarei a mesma consulta do primeiro exemplo para ver o resultado.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys UNION SELECT OBJECT_NAME(parent_object_id), name, is_disabled, is_not_trusted FROM sys.check_constraints;
Resultado:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 1 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Portanto, todas as restrições no banco de dados foram desabilitadas (porque o is_disabled coluna está definida como 1 para essas restrições).
Observe que o is_not_trusted coluna também está definida como 1 . Essa é uma consideração importante, especialmente se você pretende reativar qualquer uma de suas restrições desabilitadas.
Consulte O que você deve saber sobre WITH NOCHECK ao habilitar uma restrição CHECK no SQL Server para obter informações sobre como restaurar a confiança ao reativar suas restrições. As informações nesse artigo também se aplicam a chaves estrangeiras.
Desabilitar as restrições individualmente
Se você quiser apenas desabilitar as restrições uma a uma, consulte Como desabilitar uma restrição CHECK no SQL Server para obter exemplos.