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

Zkontrolujte, zda na tabulku odkazuje cizí klíč na serveru SQL pomocí OBJECTPROPERTY()

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.


  1. Poddotazy s EXISTS vs IN - MySQL

  2. Potlačit varovné zprávy pomocí mysql z Terminálu, ale heslo napsané ve skriptu bash

  3. Vícenásobné výběrové příkazy v jediném dotazu

  4. Převést schéma MySQL na Github Wiki?