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

Verifique se uma tabela é referenciada por uma chave estrangeira no SQL Server com OBJECTPROPERTY()


Você pode usar o OBJECTPROPERTY() função no SQL Server para verificar se uma tabela é ou não referenciada por uma chave estrangeira.

Para fazer isso, passe o ID do objeto da tabela como o primeiro argumento e TableHasForeignRef como segundo argumento. A função retorna um 1 ou um 0 dependendo se é ou não referenciado por uma chave estrangeira.

Um valor de retorno de 1 significa que a tabela é referenciado por uma chave estrangeira e um valor de 0 significa que não é.

Observe que os exemplos apresentados aqui não listam as chaves estrangeiras ou suas tabelas ou algo assim. Eles simplesmente retornam um valor verdadeiro/falso que você pode usar para testar se uma tabela é ou não referenciada por uma chave estrangeira. Se você precisar listar todas as chaves estrangeiras que fazem referência a uma determinada tabela, consulte Retornar todas as chaves estrangeiras que fazem referência a uma determinada tabela no SQL Server. Os exemplos nesse artigo listam cada chave estrangeira, bem como a(s) tabela(s) de chave estrangeira e a tabela de chave primária.


Exemplo 1 – Uso básico


Aqui está um exemplo rápido para demonstrar.
USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:
+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

Nesse caso, o WideWorldImportersDW banco de dados tem uma tabela com o ID fornecido e é referenciado por uma chave estrangeira.

Exemplo 2 – Obtendo o ID do objeto


Se você sabe o nome da tabela, mas não seu ID, você pode usar o OBJECT_ID() função para recuperar o ID com base em seu nome.

Exemplo:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:
+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

Este é o mesmo objeto do exemplo anterior.

Aqui está novamente com a saída de ID separadamente.
SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:
+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Exemplo 3 – Quando a tabela NÃO é referenciada por uma chave estrangeira


Aqui está o que acontece quando a tabela não é referenciada por uma chave estrangeira.
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:
+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

Nesse caso, o objeto é uma tabela, só que não é referenciado por uma chave estrangeira.

Exemplo 4 – Quando o objeto não é uma tabela


Aqui está o que acontece quando o banco de dados contém um objeto com o ID, mas esse objeto não é uma tabela.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultado:
+----------------------+
| TableHasForeignRef   |
|----------------------|
| NULL                 |
+----------------------+

Exemplo 5 – O objeto não existe


O SQL Server assume que a identificação do objeto está no contexto do banco de dados atual. Se você passar um ID de objeto de um banco de dados diferente, obterá um resultado NULL ou obterá resultados incorretos.
SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') AS [12345678];

Resultado:
+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

Nesse caso, o banco de dados não contém objetos com esse nome ou ID e, portanto, recebo um resultado NULL.

Você também receberá NULL em caso de erro ou se não tiver permissão para visualizar o objeto.