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

Pomocí OBJECTPROPERTY() zjistěte, zda je tabulka systémovou tabulkou na serveru SQL Server

OBJECTPROPERTY() Funkce v SQL Server vám umožňuje zkontrolovat objekt pro konkrétní vlastnost.

Tuto funkci můžete použít ke kontrole, zda je objekt systémovou tabulkou nebo ne. Chcete-li to provést, předejte ID objektu jako první argument a IsSystemTable jako druhý argument. Funkce vrací 1 nebo 0 v závislosti na tom, zda se jedná o systémovou tabulku (1 znamená, že je systémovou tabulku a 0 znamená, že není).

Příklad 1 – Základní použití

Zde je rychlý příklad k demonstraci.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Výsledek:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

V tomto případě objekt je systémovou tabulku.

Příklad 2 – Objekt NENÍ systémovou tabulkou

Zde je to, co se stane, když objekt není systémovou tabulkou.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Výsledek:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

V tomto případě databáze dělá ve skutečnosti mají objekt s tímto ID, ale objekt je ve skutečnosti uživatelsky definovaná tabulka, takže dostanu negativní výsledek.

Zde je to opět pomocí OBJECT_ID() získat ID z názvu objektu.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Výsledek:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Také jsem zkontroloval, zda je objekt uživatelsky definovanou tabulkou a výsledek je pozitivní.

Příklad 3 – 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'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') 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. Přečtěte si, jak zálohovat databázi MySQL

  2. Přidejte sloupec do tabulky v SQL

  3. Mínus vs kromě rozdílu v ORACLE/SQL Server

  4. SQLite - Aktualizace dat