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.