Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Verifica se una tabella ha una chiave esterna in SQL Server con OBJECTPROPERTY()

Puoi usare OBJECTPROPERTY() funzione in SQL Server per verificare se una tabella ha uno o più vincoli di chiave esterna.

Per fare ciò, passa l'ID oggetto della tabella come primo argomento e TableHasForeignKey come secondo argomento. La funzione restituisce un 1 o un 0 a seconda che abbia o meno un vincolo di chiave esterna.

Un valore restituito di 1 significa che la tabella fa hanno un vincolo di chiave esterna e un valore di 0 significa che non è così. Un valore restituito di 1 si applica indipendentemente dal numero di chiavi esterne della tabella (purché ne abbia almeno una).

Se desideri un elenco effettivo delle chiavi esterne, consulta Elencare tutte le chiavi esterne su una tabella in SQL Server.

Esempio 1 – Utilizzo di base

Ecco un rapido esempio da dimostrare.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];

Risultato:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 1                    |
+----------------------+

In questo caso, il WideWorldImportersDW database ha una tabella con l'ID fornito e ha un vincolo di chiave esterna.

Esempio 2:ottenere l'ID oggetto

Se conosci il nome della tabella, ma non il suo ID, puoi utilizzare OBJECT_ID() funzione per recuperare l'ID in base al suo nome.

Esempio:

SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];

Risultato:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 1                    |
+----------------------+

Questo è lo stesso oggetto dell'esempio precedente.

Eccolo di nuovo con l'output ID separatamente.

SELECT 
  OBJECT_ID('Fact.Order') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];

Risultato:

+-------------+----------------------+
| Object ID   | TableHasForeignKey   |
|-------------+----------------------|
| 1493580359  | 1                    |
+-------------+----------------------+

Esempio 3 – Quando la tabella NON ha una chiave esterna

Ecco cosa succede quando la tabella non ha una chiave esterna.

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];

Risultato:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 0                    |
+----------------------+

In questo caso, l'oggetto è una tabella, è solo che non ha una chiave esterna.

Esempio 4 – Quando l'oggetto non è un tavolo

Ecco cosa succede quando il database contiene un oggetto con l'ID, ma quell'oggetto non è una tabella.

SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];

Risultato:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| NULL                 |
+----------------------+

Esempio 5 – L'oggetto non esiste

SQL Server presuppone che l'ID oggetto si trovi nel contesto del database corrente. Se passi un ID oggetto da un database diverso, otterrai un risultato NULL o otterrai risultati errati.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignKey') AS [12345678];

Risultato:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

In questo caso il database non contiene oggetti con quel nome o ID, quindi ottengo un risultato NULL.

Otterrai anche NULL in caso di errore o se non disponi dell'autorizzazione per visualizzare l'oggetto.