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

Como retornar todas as restrições de chave estrangeira desabilitadas no SQL Server (exemplo T-SQL)


Se você precisar retornar uma lista de todas as restrições de chave estrangeira que foram desabilitadas em um banco de dados SQL Server, execute o código T-SQL abaixo.


Exemplo 1 – Retornar somente restrições de chave estrangeira desabilitadas


Essa consulta retorna apenas as restrições de chave estrangeira desabilitadas no banco de dados atual. Para este exemplo, só retorno o nome da restrição, junto com seu status desabilitado e confiável.
SELECT 
  name AS 'Constraint',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys
WHERE is_disabled = 1;

Resultado:
+------------------------+---------------+------------------+
| Constraint             | is_disabled   | is_not_trusted   |
|------------------------+---------------+------------------|
| FK_BandMember_Band     | 1             | 1                |
| FK_BandMember_Musician | 1             | 1                |
+------------------------+---------------+------------------+

Isso consulta o sys.foreign_keys visão do sistema. Sabemos que ele só retorna restrições desabilitadas porque o WHERE cláusula especifica apenas linhas que têm o is_disabled coluna definida como 1 .

Se você deseja retornar apenas ativado restrições de chave estrangeira, basta alterar o 1 para 0 .

Observe que o is_not_trusted sinalizador também está definido como 1 para essas restrições desabilitadas. Isso porque o sistema não pode garantir que a restrição tenha verificado todos os dados. Isso faz sentido, porque desabilitar uma restrição abre a possibilidade de dados inválidos entrarem no banco de dados sem serem verificados.

Aqui está a mesma consulta novamente, mas desta vez eu incluo a tabela e a tabela referenciada para cada restrição:
SELECT 
  name AS 'Constraint',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Table',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys
WHERE is_disabled = 1;

Resultado:
+------------------------+------------+--------------------+---------------+------------------+
| Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
|------------------------+------------+--------------------+---------------+------------------|
| FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
| FK_BandMember_Musician | BandMember | Musician           | 1             | 1                |
+------------------------+------------+--------------------+---------------+------------------+

Exemplo 2 – Retornar todas as restrições de chave estrangeira


A consulta a seguir retorna todos restrições de chave estrangeira para o banco de dados atual (não apenas os desabilitados):
SELECT 
  name AS 'Constraint',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys;

Resultado:
+--------------------------------+---------------+------------------+
| Constraint                     | is_disabled   | is_not_trusted   |
|--------------------------------+---------------+------------------|
| FK_BandMember_Band             | 1             | 1                |
| FK_BandMember_Musician         | 1             | 1                |
| FK_MembershipPeriod_BandMember | 0             | 0                |
+--------------------------------+---------------+------------------+