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

Zjistěte, zda je objekt tabulkovou funkcí na serveru SQL pomocí OBJECTPROPERTY()

Můžete použít OBJECTPROPERTY() funkce na serveru SQL Server ke kontrole, zda je objekt funkcí s hodnotou tabulky či nikoli.

Chcete-li to provést, předejte ID objektu jako první argument a IsTableFunction jako druhý argument. Funkce vrací 1 nebo 0 v závislosti na tom, zda se jedná o funkci s tabulkovou hodnotou.

Vrácená hodnota 1 znamená, že je funkce s tabulkovou hodnotou a hodnota 0 znamená, že není.

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

Zde je rychlý příklad k demonstraci.

USE Music;
SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];

Výsledek:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

V tomto případě Hudba databáze má objekt s poskytnutým ID a je to funkce s tabulkovou hodnotou.

Příklad 2 – Získání ID objektu

Pokud znáte název objektu, ale neznáte jeho ID, můžete použít OBJECT_ID() funkce pro načtení ID na základě jeho názvu.

Příklad:

SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Výsledek:

+-------------------+
| IsTableFunction   |
|-------------------|
| 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('ufn_AlbumsByGenre') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Výsledek:

+-------------+-------------------+
| Object ID   | IsTableFunction   |
|-------------+-------------------|
| 34099162    | 1                 |
+-------------+-------------------+

Příklad 3 – Když objekt NENÍ funkcí s hodnotou tabulky

Zde je to, co se stane, když objekt není funkcí s tabulkovou hodnotou.

SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];

Výsledek:

+-------------------+
| IsTableFunction   |
|-------------------|
| 0                 |
+-------------------+

V tomto případě databáze dělá mít objekt s tímto ID, ale objekt je ve skutečnosti uživatelská tabulka (nikoli funkce s tabulkovou hodnotou), takže dostanu negativní výsledek.

Zde je to opět pomocí OBJECT_ID() .

SELECT 
  OBJECT_ID('Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];

Výsledek:

+-------------+-------------------+---------------+
| Object ID   | IsTableFunction   | IsUserTable   |
|-------------+-------------------+---------------|
| 885578193   | 0                 | 1             |
+-------------+-------------------+---------------+

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

Příklad 4 – 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'), 'IsTableFunction') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsTableFunction') 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. Funkce COS() v Oracle

  2. Kdy musíme použít NVARCHAR/NCHAR místo VARCHAR/CHAR v SQL Server?

  3. Jak vypustit sloupec s omezením v SQL Server

  4. Alternativy diagnostiky pgDash - Správa dotazů PostgreSQL s ClusterControl