Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server ke kontrole, zda tabulka obsahuje jedno nebo více omezení cizího klíče.
Chcete-li to provést, předejte ID objektu tabulky jako první argument a TableHasForeignKey
jako druhý argument. Funkce vrací 1
nebo 0
v závislosti na tom, zda má nebo nemá omezení cizího klíče.
Vrácená hodnota 1
znamená, že tabulka dělá mají omezení cizího klíče a hodnotu 0
znamená, že ne. Vrácená hodnota 1
platí bez ohledu na to, kolik cizích klíčů tabulka má (pokud má alespoň jeden).
Chcete-li skutečný seznam cizích klíčů, přečtěte si téma Seznam všech cizích klíčů v tabulce na serveru SQL.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];
Výsledek:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
V tomto případě WideWorldImportersDW databáze má tabulku s poskytnutým ID a má omezení cizího klíče.
Příklad 2 – Získání ID objektu
Pokud znáte název tabulky, ale neznáte její ID, můžete použít OBJECT_ID()
funkce pro načtení ID na základě jeho názvu.
Příklad:
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Výsledek:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Jedná se o stejný objekt z předchozího příkladu.
Zde je to opět s výstupem ID samostatně.
SELECT OBJECT_ID('Fact.Order') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Výsledek:
+-------------+----------------------+ | Object ID | TableHasForeignKey | |-------------+----------------------| | 1493580359 | 1 | +-------------+----------------------+
Příklad 3 – Když tabulka NEMÁ cizí klíč
Co se stane, když tabulka nemá cizí klíč.
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];
Výsledek:
+----------------------+ | TableHasForeignKey | |----------------------| | 0 | +----------------------+
V tomto případě je objektem tabulka, jen nemá cizí klíč.
Příklad 4 – Když objekt není tabulka
Co se stane, když databáze obsahuje objekt s ID, ale tento objekt není tabulka.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];
Výsledek:
+----------------------+ | TableHasForeignKey | |----------------------| | NULL | +----------------------+
Příklad 5 – 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'), 'TableHasForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignKey') 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.