sql >> Databáze >  >> RDS >> Sqlserver

Zkontrolujte, zda tabulka obsahuje cizí klíč na serveru SQL pomocí OBJECTPROPERTY()

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.


  1. Jak mohu potlačit výstup záhlaví sloupců pro jeden příkaz SQL?

  2. Aktualizace MySQL CASE WHEN/THEN/ELSE

  3. Uspořádejte uzly TreeView přetažením

  4. Opětovné použití SqlCommand?