U kunt de OBJECTPROPERTY()
. gebruiken functie in SQL Server om te controleren of een tabel een of meer externe sleutelbeperkingen heeft.
Om dit te doen, geeft u de object-ID van de tabel door als het eerste argument en TableHasForeignKey
als tweede argument. De functie retourneert een 1
of een 0
afhankelijk van het al dan niet hebben van een externe sleutelbeperking.
Een retourwaarde van 1
betekent dat de tabel doet een externe sleutelbeperking hebben en een waarde van 0
betekent dat niet. Een retourwaarde van 1
is van toepassing ongeacht hoeveel buitenlandse sleutels de tabel heeft (zolang deze er minstens één heeft).
Als u een actuele lijst van de externe sleutels wilt, raadpleegt u Alle buitenlandse sleutels op een tabel in SQL Server weergeven.
Voorbeeld 1 – Basisgebruik
Hier is een snel voorbeeld om te demonstreren.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];
Resultaat:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
In dit geval is de WideWorldImportersDW database heeft een tabel met de opgegeven ID en er is een externe sleutelbeperking.
Voorbeeld 2 – De object-ID verkrijgen
Als u de naam van de tabel weet, maar niet de ID, kunt u de OBJECT_ID()
gebruiken functie om de ID op basis van zijn naam op te halen.
Voorbeeld:
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Resultaat:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Dit is hetzelfde object uit het vorige voorbeeld.
Hier is het weer met de ID-uitvoer afzonderlijk.
SELECT OBJECT_ID('Fact.Order') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Resultaat:
+-------------+----------------------+ | Object ID | TableHasForeignKey | |-------------+----------------------| | 1493580359 | 1 | +-------------+----------------------+
Voorbeeld 3 – Wanneer de tabel GEEN externe sleutel heeft
Dit is wat er gebeurt als de tabel geen externe sleutel heeft.
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];
Resultaat:
+----------------------+ | TableHasForeignKey | |----------------------| | 0 | +----------------------+
In dit geval is het object een tabel, alleen heeft het geen externe sleutel.
Voorbeeld 4 – Wanneer het object geen tafel is
Dit is wat er gebeurt als de database wel een object met de ID bevat, maar dat object geen tabel is.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];
Resultaat:
+----------------------+ | TableHasForeignKey | |----------------------| | NULL | +----------------------+
Voorbeeld 5 – Object bestaat niet
SQL Server gaat ervan uit dat de object-ID zich in de huidige databasecontext bevindt. Als u een object-ID uit een andere database doorgeeft, krijgt u ofwel een NULL-resultaat of krijgt u onjuiste resultaten.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignKey') AS [12345678];
Resultaat:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
In dit geval bevat de database geen objecten met die naam of ID, en dus krijg ik een NULL-resultaat.
Je krijgt ook NULL bij een fout of als je geen toestemming hebt om het object te bekijken.