Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at finde ud af, om et objekt er en fremmednøgle eller ej.
For at finde ud af, om et objekt er en fremmednøgle, skal du sende objekt-id'et som det første argument og IsForeignKey som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om det er en fremmednøgle eller ej.
En returværdi på 1 betyder, at det er en fremmednøgle og en værdi på 0 betyder, at det ikke er det.
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
USE Music; SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];
Resultat:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
I dette tilfælde er Musik databasen har et objekt med det angivne ID, og det er en fremmednøgle.
Eksempel 2 – Hentning af objekt-id'et
Hvis du kender objektets navn, men ikke dets ID, kan du bruge OBJECT_ID() funktion for at hente ID'et baseret på dets navn.
Eksempel:
SELECT OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Resultat:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
I dette tilfælde kontrollerede jeg det samme objekt fra det forrige eksempel.
Her er den igen med ID-udgangen separat.
SELECT
OBJECT_ID('FK_Albums_Artists') AS [Object ID],
OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Resultat:
+-------------+----------------+ | Object ID | IsForeignKey | |-------------+----------------| | 981578535 | 1 | +-------------+----------------+
Eksempel 3 – Når objektet IKKE er en fremmednøgle
Her er, hvad der sker, når objektet ikke er en fremmednøgle.
SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];
Resultat:
+----------------+ | IsForeignKey | |----------------| | 0 | +----------------+
I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en visning, så jeg får et negativt resultat.
Her bruger den igen OBJECT_ID() .
SELECT
OBJECT_ID('RockAlbums') AS [Object ID],
OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey],
OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];
Resultat:
+-------------+----------------+----------+ | Object ID | IsForeignKey | IsView | |-------------+----------------+----------| | 1525580473 | 0 | 1 | +-------------+----------------+----------+
I dette tilfælde har jeg også tjekket, om objektet er en visning, og resultatet er positivt.
Eksempel 4 – 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'), 'IsForeignKey') AS [InvalidObject],
OBJECTPROPERTY(12345678, 'IsForeignKey') 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.