Du kan bruge OBJECTPROPERTY()
funktion i SQL Server for at kontrollere, om en tabel refereres til af en fremmednøgle.
For at gøre dette skal du sende tabellens objekt-id som det første argument og TableHasForeignRef
som det andet argument. Funktionen returnerer en 1
eller en 0
afhængigt af, om den er refereret af en fremmednøgle.
En returværdi på 1
betyder, at tabellen er refereret af en fremmednøgle og en værdi på 0
betyder, at det ikke er det.
Bemærk, at eksemplerne præsenteret her ikke viser fremmednøglerne eller deres tabeller eller noget lignende. De returnerer simpelthen en sand/falsk værdi, som du kan bruge til at teste, om en tabel er refereret til af en fremmednøgle. Hvis du har brug for at liste alle fremmednøgler, der refererer til en given tabel, se Returner alle fremmednøgler, der refererer til en given tabel i SQL Server. Eksemplerne i denne artikel viser hver fremmednøgle, såvel som fremmednøgletabellen/-erne og primærnøgletabellen.
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
I dette tilfælde er WideWorldImportersDW databasen har en tabel med det angivne ID, og den refereres til af en fremmednøgle.
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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
Dette er det samme objekt fra det foregående eksempel.
Her er den igen med ID-udgangen separat.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+-------------+----------------------+ | Object ID | TableHasForeignRef | |-------------+----------------------| | 1013578649 | 1 | +-------------+----------------------+
Eksempel 3 – Når tabellen IKKE henvises til med en fremmednøgle
Her er, hvad der sker, når tabellen ikke refereres af en fremmednøgle.
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 0 | +----------------------+
I dette tilfælde er objektet en tabel, det er bare, at det ikke refereres af 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 ikke er en tabel.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 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'), 'TableHasForeignRef') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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.