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.