Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server ke kontrole, zda na tabulku odkazuje cizí klíč.
Chcete-li to provést, předejte ID objektu tabulky jako první argument a TableHasForeignRef
jako druhý argument. Funkce vrací 1
nebo 0
v závislosti na tom, zda na něj odkazuje cizí klíč.
Vrácená hodnota 1
znamená, že tabulka je odkazovaný cizím klíčem a hodnotou 0
znamená, že není.
Všimněte si, že zde uvedené příklady neuvádějí cizí klíče nebo jejich tabulky ani nic podobného. Jednoduše vrátí hodnotu true/false, kterou můžete použít k testování, zda na tabulku odkazuje cizí klíč. Pokud potřebujete vypsat všechny cizí klíče, které odkazují na danou tabulku, přečtěte si téma Návrat všech cizích klíčů, které odkazují na danou tabulku na serveru SQL Server. Příklady v tomto článku uvádějí každý cizí klíč, stejně jako tabulky cizích klíčů a tabulku primárních klíčů.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];
Výsledek:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
V tomto případě WideWorldImportersDW databáze má tabulku s poskytnutým ID a odkazuje na ni cizí klíč.
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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Výsledek:
+----------------------+ | TableHasForeignRef | |----------------------| | 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('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Výsledek:
+-------------+----------------------+ | Object ID | TableHasForeignRef | |-------------+----------------------| | 1013578649 | 1 | +-------------+----------------------+
Příklad 3 – Když na tabulku NENÍ odkazováno cizím klíčem
Co se stane, když na tabulku neodkazuje cizí klíč.
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];
Výsledek:
+----------------------+ | TableHasForeignRef | |----------------------| | 0 | +----------------------+
V tomto případě je objektem tabulka, jen na ni neodkazuje 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'), 'TableHasForeignRef') AS [TableHasForeignRef];
Výsledek:
+----------------------+ | TableHasForeignRef | |----------------------| | 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'), 'TableHasForeignRef') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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.