Můžete použít OBJECTPROPERTY()
funkce v SQL Server zjistit, zda je objekt cizí klíč.
Chcete-li zjistit, zda je objekt cizí klíč, předejte ID objektu jako první argument a IsForeignKey
jako druhý argument. Funkce vrací 1
nebo 0
podle toho, zda se jedná o cizí klíč.
Vrácená hodnota 1
znamená, že je cizí klíč a hodnotu 0
znamená, že není.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE Music; SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];
Výsledek:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
V tomto případě Hudba databáze má objekt s poskytnutým ID a je to cizí klíč.
Příklad 2 – Získání ID objektu
Pokud znáte název objektu, ale neznáte jeho ID, můžete použít OBJECT_ID()
funkce pro načtení ID na základě jeho názvu.
Příklad:
SELECT OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Výsledek:
+----------------+ | IsForeignKey | |----------------| | 1 | +----------------+
V tomto případě jsem zkontroloval stejný objekt z předchozího příkladu.
Zde je to opět s výstupem ID samostatně.
SELECT OBJECT_ID('FK_Albums_Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];
Výsledek:
+-------------+----------------+ | Object ID | IsForeignKey | |-------------+----------------| | 981578535 | 1 | +-------------+----------------+
Příklad 3 – Když objekt NENÍ cizí klíč
Co se stane, když objekt není cizí klíč.
SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];
Výsledek:
+----------------+ | IsForeignKey | |----------------| | 0 | +----------------+
V tomto případě databáze dělá ve skutečnosti mít objekt s tímto ID, ale objekt je ve skutečnosti pohled, takže dostanu negativní výsledek.
Zde je to opět pomocí OBJECT_ID()
.
SELECT OBJECT_ID('RockAlbums') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey], OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];
Výsledek:
+-------------+----------------+----------+ | Object ID | IsForeignKey | IsView | |-------------+----------------+----------| | 1525580473 | 0 | 1 | +-------------+----------------+----------+
V tomto případě jsem také zkontroloval, zda je objekt pohledem, a výsledek je pozitivní.
Příklad 4 – Objekt neexistuje
SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud předáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsForeignKey') AS [12345678];
Výsledek:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
V tomto případě databáze neobsahuje žádné objekty tohoto jména nebo ID, takže dostanu výsledek NULL.
Při chybě nebo v případě, že nemáte oprávnění k zobrazení objektu, získáte také hodnotu NULL.