Aug 8 2011

#QuickTip 6 - [SQL Server] Desabilitar todas as constraints de todas as tabelas da base de dados

Category: QuickTip | SQL ServerSuzuki @ 11:10

Olá leitor,
Por muitas vezes você deve ter se perguntado, como desabilitar uma constraint no SQL Server e aqui você poderá encontrar esta resposta e algumas dicas que podem lhe ajudar.
Pra exemplificar esta postagem utilizei meu SQL Server Express Edition 2005. Entretanto, teste no seu caso, muito provavelmente você terá sucesso também.
Antes de desabilitar todas as constraints de uma base vamos, ver como desabilitar uma constraint especifica e claro vamos ver como reabilitá-la.

Segundo a MSDN restrições CHECK impõe integridade de domínio limitando os valores aceitos por uma coluna. Elas são semelhantes a restrições FOREIGN KEY em que eles controlam os valores colocados em uma coluna. A diferença está em como elas determinam quais valores são válidos: restrições FOREIGN KEY obtêm uma lista de valores válidos de outra tabela, e restrições CHECK determinam valores válidos de uma expressão lógica que não tem base em dados de outra coluna. Por exemplo, o intervalo de valores para uma coluna salário pode ser limitado pela criação de uma restrição CHECK, que apenas permite que os dados variem entre US$ 15.000 e US$ 100.000. Isto evita que salários sejam digitados além do intervalo de salário regular.
Você pode criar uma restrição CHECK com qualquer expressão lógica (Booleana) que retorne TRUE ou FALSE com base em operadores lógicos. Para o exemplo anterior, a expressão lógica é: salary >= 15000 AND salary <= 100000.
Você pode aplicar várias restrições CHECK a uma única coluna. Você também pode aplicar uma única restrição CHECK a várias colunas criando-as ao nível de tabela. Por exemplo, uma restrição CHECK de várias colunas pode ser usada para confirmar que qualquer linha com o valor de coluna país/região dos EUA também tenha um valor de dois caracteres na coluna estado. Isto permite que várias condições sejam verificadas em um local.

Veja mais em Check constraint.

Abaixo segue o script para desabilitar uma única constraint e como habilitá-la, na Table_Name você coloca o nome de sua tabela e na Constraint_Name o nome de sua constraint.

  1. -- Desabilitar uma única constraint   
  2. ALTER TABLE Table_Name NOCHECK CONSTRAINT Constraint_Name   
  3. -- Habilitar uma única constraint   
  4. ALTER TABLE Table_Name CHECK CONSTRAINT Constraint_Name  

Maravilha!
Porem se você quiser desabilitar todas as constraints de uma tabela?
Há outra forma, repare que agora não citamos o nome da constraint e substituímos pelo parâmetro ALL:

  1. -- Desabilitar todas as constraints de uma tabela   
  2. ALTER TABLE Table_Name NOCHECK CONSTRAINT ALL  
  3. -- Habilitar todas as constraints de uma tabela   
  4. ALTER TABLE Table_Name CHECK CONSTRAINT ALL  

E agora o finalmente!
Como desabilitar todas as constraints de todas as tabelas da base de dados?
Para isso vamos usar a dica da postagem de outra postagem, utilizando a procedure SP_MSFOREACHTABLE.

Veja a postagem : #QuickTip 4 - [SQL Server] Como executar um select count em todas as tabelas de uma base de dados

Então para desabilitar fica simples assim:

Então para desabilitar todas as constraints de todas as tabelas da base de dados fica simples assim:

  1. -- Desabilitar todas as constraints de todas as tabelas da base de dados   
  2. EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"  
  3. -- ou   
  4. EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'  

Assim conseguimos fazer o processo contrário, ou seja, habilitar todas as constraints de todas as tabelas da base de dados:

  1. -- Habilitar todas as constraints de todas as tabelas da base de dados   
  2. EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"  
  3. -- ou   
  4. EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'  

Por hoje é isso.
Espero que tenha sido útil.
Até a próxima.

 

Então disse-lhe Jesus: Vai-te, Satanás, porque está escrito: Ao Senhor teu Deus adorarás, e só a ele servirás. (Mateus 4:10)

Tags: , , , , , ,

Comments

1.
pingback thiagosatoshisuzuki.wordpress.com says:

Pingback from thiagosatoshisuzuki.wordpress.com

#QuickTip 6 – [SQL Server] Desabilitar todas as constraints de todas as tabelas da base de dados « Thiago Satoshi Suzuki

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading