Para retornar uma lista de todas as restrições de chave estrangeira não confiável em um banco de dados SQL Server, você pode executar o código T-SQL abaixo.
Uma chave estrangeira não confiável é aquela que tem seu
is_not_trusted
sinalizador definido como 1
. Exemplo 1 – Retornar apenas restrições de chave estrangeira não confiável
Essa consulta retorna apenas as restrições de chave estrangeira não confiável no banco de dados atual. Para este exemplo, só retorno o nome da restrição, seu status confiável, junto com seu status ativado/desativado.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Resultado:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
Isso consulta o
sys.foreign_keys
visão do sistema. Sabemos que ele só retorna restrições não confiáveis porque o WHERE
cláusula especifica apenas linhas que têm o is_not_trusted
coluna definida como 1
. Se você quiser retornar apenas confiável restrições de chave estrangeira, basta alterar o
1
para 0
. Também incluí o
is_disabled
sinalizador, porque nos mostra se a restrição está ativada ou não. Podemos ver que uma das restrições está habilitada e a outra não. Isso demonstra o fato de que uma restrição pode não ser confiável mesmo quando está habilitada. Isso ocorre porque, ao habilitar (ou criar) uma restrição, você tem a opção de fazer com que ela verifique quaisquer dados existentes antes de ser habilitada. Se você optar por não verificar os dados existentes, a restrição permanecerá não confiável depois de habilitada.
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_not_trusted = 1;
Resultado:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 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 não confiáveis):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Resultado:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+