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

Tjek, om en tabel har en fremmednøgle i SQL Server med OBJECTPROPERTY()

Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at kontrollere, om en tabel har en eller flere fremmednøglebegrænsninger.

For at gøre dette skal du sende tabellens objekt-id som det første argument og TableHasForeignKey som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om den har en fremmednøglebegrænsning eller ej.

En returværdi på 1 betyder, at tabellen gør har en fremmednøgle-begrænsning og en værdi på 0 betyder, at det ikke gør. En returværdi på 1 gælder uanset hvor mange fremmednøgler tabellen har (så længe den har mindst én).

Hvis du vil have en faktisk liste over fremmednøglerne, se Liste over alle fremmednøgler på en tabel i SQL Server.

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

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

Resultat:

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

I dette tilfælde er WideWorldImportersDW databasen har en tabel med det angivne ID, og ​​den har en fremmednøglebegrænsning.

Eksempel 2 – Hentning af objekt-id'et

Hvis du kender tabellens navn, men ikke dens ID, kan du bruge OBJECT_ID() funktion for at hente ID'et baseret på dets navn.

Eksempel:

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

Resultat:

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

Dette er det samme objekt fra det foregående eksempel.

Her er den igen med ID-udgangen separat.

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

Resultat:

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

Eksempel 3 – Når tabellen IKKE har en fremmednøgle

Her er, hvad der sker, når bordet ikke har en fremmednøgle.

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

Resultat:

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

I dette tilfælde er objektet en tabel, det er bare, at det ikke har en fremmednøgle.

Eksempel 4 – Når objektet ikke er en tabel

Her er, hvad der sker, når databasen indeholder et objekt med ID'et, men det objekt er ikke en tabel.

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

Resultat:

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

Eksempel 5 – Objekt eksisterer ikke

SQL Server antager, at objekt-id'et er i den aktuelle databasekontekst. Hvis du sender et objekt-id fra en anden database, får du enten et NULL-resultat, eller du får forkerte resultater.

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

Resultat:

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

I dette tilfælde indeholder databasen ingen objekter med det navn eller ID, og ​​så får jeg et NULL resultat.

Du får også NULL ved fejl, eller hvis du ikke har tilladelse til at se objektet.


  1. Indsamlingsmetode:UDVID Procedure i Oracle-databasen

  2. Understøtter SQLDeveloper eksekvering af scripts?

  3. SQL:Sorter efter prioritet, men sæt 0 til sidst

  4. SQL Group BY, Top N elementer for hver gruppe