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 | +--------------------------------+---------------+------------------+