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

Zjistěte, zda je objekt uživatelsky definovanou tabulkou na serveru SQL pomocí OBJECTPROPERTY()

Můžete použít OBJECTPROPERTY() funkce na serveru SQL Server ke kontrole, zda je objekt uživatelsky definovanou tabulkou či nikoli.

Chcete-li to provést, předejte ID objektu jako první argument a IsUserTable jako druhý argument. Funkce vrací 1 nebo 0 podle toho, zda se jedná o uživatelsky definovanou tabulku.

Vrácená hodnota 1 znamená, že je uživatelsky definovanou tabulku a hodnotu 0 znamená, že není.

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

Zde je rychlý příklad k demonstraci.

USE WideWorldImportersDW;SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') JAKO [IsUserTable];

Výsledek:

+----------------+| IsUserTable ||---------------|| 1 |+---------------+

V tomto případě WideWorldImportersDW databáze má objekt s poskytnutým ID a je to uživatelsky definovaná tabulka.

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('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Výsledek:

+----------------+| IsUserTable ||---------------|| 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 [ID objektu], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Výsledek:

+-------------+---------------+| ID objektu | IsUserTable ||-------------+---------------|| 1013578649 | 1 |+-------------+---------------+

Příklad 3 – Když objekt NENÍ tabulkou definovanou uživatelem

Co se stane, když objekt není uživatelská tabulka.

SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];

Výsledek:

+----------------+| IsUserTable ||---------------|| 0 |+---------------+

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

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

SELECT OBJECT_ID('Sequences.ReseedAllSequences') AS [ID objektu], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable], OBJECTPROPERTY(OBJECT_ID('seequences'Sequences' IsProcedure') AS [IsProcedure];

Výsledek:

+-------------+---------------+---------------+ | ID objektu | IsUserTable | IsProcedure ||-------------+---------------+---------------|| 402100473 | 0 | 1 |+-------------+---------------+---------------+ 

Také jsem zkontroloval, zda je objekt uloženou procedurou, 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'), 'IsUserTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') 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 SIGN() v Oracle

  2. Vytvoření spouštěče v Oracle Express

  3. Řešení dlouhodobých dotazů MySQL

  4. import CSV do phpmyadmin