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

Como desabilitar todas as restrições CHECK e de chave estrangeira para uma tabela no SQL Server (Exemplos de T-SQL)


Você pode usar o código abaixo para desativar todos os CHECK e restrições de chave estrangeira para uma tabela específica no SQL Server.

Basta substituir TableName com o nome da tabela aplicável.
ALTER TABLE TableName NOCHECK CONSTRAINT ALL

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, três das quais são para o ConstraintTest tabela.

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 para o ConstraintTest tabela:
ALTER TABLE ConstraintTest 
NOCHECK CONSTRAINT ALL;

Exemplo 3 – Verifique o resultado


Agora eu executo 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     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Como esperado, todas as três restrições para o ConstraintTest tabela foi desabilitada (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 desativadas.

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ê não quiser desabilitar todas as restrições na tabela, poderá desabilitá-las individualmente. Consulte Como desabilitar uma restrição CHECK no SQL Server e Como desabilitar uma chave estrangeira no SQL Server.

Reative as restrições


Se você precisar reativar todas as restrições de uma tabela, consulte Como habilitar todas as restrições de verificação e chave estrangeira para uma tabela.

Se você precisar reativá-los individualmente, consulte Como habilitar uma restrição CHECK no SQL Server e Como habilitar uma chave estrangeira no SQL Server.