SQL Server 2008, como listar as constraints de tabelas em uma query

Muitas vezes precisamos consultar rapidamente em um banco de dados SQL Server todas as constraints de tabelas e encontrei um exemplo bem interessante que usei e me ajudou bastante tanto para consultar quanto para no auxílio a geração de scripts de execução de comandos em massa.

A Query abaixo lista todas as constraints de tabelas de um banco de dados e pode ser adaptada ou combinada com outras tabelas de catálogo do SQL Server de acordo com a necessidade

SELECT
KCU1.CONSTRAINT_NAME AS ‘FK_Nome_Constraint’
, KCU1.TABLE_NAME AS ‘FK_Nome_Tabela’
, KCU1.COLUMN_NAME AS ‘FK_Nome_Coluna’
, FK.is_disabled AS ‘FK_Esta_Desativada’
, KCU2.CONSTRAINT_NAME AS ‘PK_Nome_Constraint_Referenciada’
, KCU2.TABLE_NAME AS ‘PK_Nome_Tabela_Referenciada’
, KCU2.COLUMN_NAME AS ‘PK_Nome_Coluna_Referenciada’
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1
ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG
AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA
AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2
ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG
AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA
AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
JOIN sys.foreign_keys FK on FK.name = KCU1.CONSTRAINT_NAME
Order by
KCU1.TABLE_NAME

copie e cole a query no sql management studio e execute-a o resultado deve ser similar ao da imagem abaixo

Retorno do Select das Constraints Foreign Key

  • Para Ativar ou Desativar uma CONTRAINTs executar a seguinte Instrução SQL:
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT [Nome da Constraint]
ALTER TABLE [Nome da Tabela] CHECK CONSTRAINT [Nome da Constraint]
  • Para Ativar ou Desativar todas as CONTRAINTs  de uma tabela basta executar a seguinte Instrução SQL:
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT ALL 
ALTER TABLE [Nome da Tabela] NOCHECK CONSTRAINT ALL

Conceitos Adicionais:

  • Quando se Desativa uma CONSTRAINT todas as regras que ela gerencia não são mais executadas nos próximos Inserts.
  • Quando se Ativa uma CONSTRAINT as linhas Inseridas não são revalidadas pela CONSTRAINT.
  • Evite Desativar uma CONSTRAINT, isso pode causa uma perda de Confiabilidade dos dados.

Fonte de pesquisa: http://markomafs.wordpress.com/2012/05/08/sql-server-2008-selecionar-todas-as-foreign-keys/