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

Como retornar todas as restrições de chave estrangeira não confiável no SQL Server (exemplo T-SQL)


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