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

Získejte ID objektu z jeho názvu na serveru SQL:OBJECT_ID()

V SQL Server můžete použít OBJECT_ID() funkce, která vrátí ID objektu na základě jeho názvu.

To může být užitečné, když potřebujete ID objektu, ale znáte pouze jeho název.

Oficiální definice OBJECT_ID() je, že vrací identifikační číslo databázového objektu objektu s rozsahem schématu .

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

Zde je základní příklad, který demonstruje, jak to funguje.

SELECT OBJECT_ID('Artists') AS Result;

Výsledek:

+------------+| Výsledek ||------------|| 885578193 |+-----------+

V tomto případě aktuální databáze obsahuje objekt nazvaný Albums a jeho ID je 885578193. Toto je ID, které můžete najít v object_id sloupec sys.objects zobrazení systémového katalogu.

Příklad 2 – Zkontrolujte zobrazení sys.objects

Zde je další základní příklad pro ověření toho, co jsem právě řekl.

SELECT name, object_id, OBJECT_ID(name) AS [OBJECT_ID(name)]FROM sys.objectsWHERE name ='Artists';

Výsledek:

+---------+-------------+-------------------+| jméno | object_id | OBJECT_ID(jméno) ||---------+-------------+-------------------| | Umělci | 885578193 | 885578193 |+---------+-------------+-------------------+

Soubor sys.objects pohled systémového katalogu obsahuje řádek pro každý uživatelsky definovaný objekt v rozsahu schématu, který je vytvořen v databázi.

V tomto příkladu první dva sloupce zobrazují name objektu a object_id resp.

Ve třetím sloupci tohoto příkladu používám OBJECT_ID() vrátit ID objektu na základě jeho názvu. Za tímto účelem předám sloupec názvu do OBJECT_ID() funkce.

Toto je samozřejmě pouze příklad a použití OBJECT_ID() bylo v tomto případě zbytečné, protože sys.objects již vrací ID objektu.

Příklad 3 – užitečnější příklad

V tomto příkladu používám OBJECT_ID() v WHERE klauzuli, takže získám pouze výsledky související s tabulkou nazvanou Client .

SELECT OBJECT_NAME(referencing_id) AS [Referencing_entity], OBJECT_NAME(referencing_minor_id) AS [Referencing Minor Entity], referencing_class_desc AS [Class], COL_NAME(referenced_id, referenced_minor_expressID) AS [Column]HEqOBREldependence_sys'idence. Klient');

Výsledek:

+----------------------+----------------------- -----+------------------+------------+| Odkazující entita | Odkazování na vedlejší entitu | třída | Sloupec ||----------------------+------------------------ ----+------------------+------------|| uspGetClient | NULL | OBJECT_OR_COLUMN | NULL || uspGetOrdersByClient | NULL | OBJECT_OR_COLUMN | NULL || chkClientCode | NULL | OBJECT_OR_COLUMN | ClientCode |+----------------------+------------------------- ----+------------------+------------+

V tomto případě jsem chtěl vidět, které entity závisí na Client tabulka (tj. které entity odkazují na tuto tabulku ve svém kódu SQL). referenced_id sloupec používá ID objektu, takže pomocí OBJECT_ID() , podařilo se mi získat ID Client tabulku a porovnejte ji s referenced_id .

Podrobnější vysvětlení tohoto dotazu a související příklady naleznete v části Hledání závislostí na serveru SQL Server:sql_expression_dependencies.

Příklad 4 – Plně kvalifikovaná jména

Máte také možnost kvalifikovat název objektu názvem schématu a v případě potřeby také názvem databáze.

Zde je jednoduchý příklad k demonstraci:

SELECT OBJECT_ID('Artists') AS [1 Název části], OBJECT_ID('dbo.Artists') AS [2 Název části], OBJECT_ID('Music.dbo.Artists') AS [3 Název části]; 

Výsledek:

+---------------+---------------+-------------- -+| 1 Název dílu | 2 Název dílu | Název 3 části ||---------------+---------------+-------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +

Tady je to znovu, tentokrát s použitím hranatých závorek jako oddělovačů:

SELECT OBJECT_ID('[Artists]') AS [1 Název části], OBJECT_ID('[dbo].[Artists]') AS [2 Název části], OBJECT_ID('[Hudba].[dbo].[ Artists]') AS [3 Part Name];

Výsledek:

+---------------+---------------+-------------- -+| 1 Název dílu | 2 Název dílu | Název 3 části ||---------------+---------------+-------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +

Stejný výsledek.

Pokud někdy dostanete výsledek NULL, i když víte, že objekt existuje, zkuste jej kvalifikovat pomocí schématu (a dokonce i názvu databáze).

Příklad 5 – Křížové databázové dotazy

Ve výchozím nastavení SQL Server předpokládá, že název objektu je v kontextu aktuální databáze. Pro specifikaci objektu v jiné databázi můžete použít 3dílný název.

Zde je stejný kód z předchozího příkladu, až na to, že tentokrát kód spustím dvakrát:při prvním spuštění v Music při druhém spuštění v WideWorldImportersDW databáze:

USE Music;SELECT OBJECT_ID('Artists') AS [1 Název části], OBJECT_ID('dbo.Artists') AS [2 Název části], OBJECT_ID('Music.dbo.Artists') AS [3 Název části ];USE WideWorldImportersDW;SELECT OBJECT_ID('Artists') AS [1 Název části], OBJECT_ID('dbo.Artists') AS [2 Název části], OBJECT_ID('Music.dbo.Artists') AS [3 Název části];

Výsledek:

Kontext databáze byl změněn na „Hudba“.+---------------+---------------+------- ---------+| 1 Název dílu | 2 Název dílu | Název 3 části ||---------------+---------------+-------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +(1 řádek ovlivněn)Změněn kontext databáze na „WideWorldImportersDW“.+---------------+---------------+--- ------------+| 1 Název dílu | 2 Název dílu | Název 3 části ||---------------+---------------+-------------- --|| NULL | NULL | 885578193 |+---------------+---------------+--------------- + (dotčen 1 řádek)

V prvním výsledku vrátí všechny tři sloupce správné ID. Je to proto, že objekt je náhodou v Music databáze.

Ve druhém výsledku je pouze 3dílný název schopen najít správný objekt. To se dá očekávat, protože názvy 1 a 2 části neurčují název databáze, proto předpokládá, že objekt je v WideWorldImportersDW (špatná) databáze.

Příklad 6 – Určete typ objektu

OBJECT_ID() funkce také přijímá argument pro typ objektu. Tento argument, pokud je uveden, následuje za názvem objektu.

Příklad:

SELECT OBJECT_ID('Artists', 'U') AS [Tabulka];

Výsledek:

+------------+| Tabulka ||------------|| 885578193 |+-----------+

Zde specifikuji, že typ objektu je U , což znamená „Tabulka (definovaná uživatelem)“.

Pokud se pokusím zadat jiný typ objektu, dostanu NULL :

SELECT OBJECT_ID('Umělci', 'U') AS [Tabulka], OBJECT_ID('Umělci', 'V') AS [Zobrazit], OBJECT_ID('Umělci', 'P') AS [Uložená procedura]; 

Výsledek:

+-----------+--------+--------------------+| Tabulka | Zobrazit | Uložená procedura ||-----------+--------+--------------------|| 885578193 | NULL | NULL |+-----------+--------+--------------------+

Tady je to znovu, ale s názvem pohledu:

SELECT OBJECT_ID('RockAlbums', 'U') AS [Tabulka], OBJECT_ID('RockAlbums', 'V') AS [Zobrazit], OBJECT_ID('RockAlbums', 'P') AS [Uložená procedura]; 

Výsledek:

+---------+------------+--------------------+| Tabulka | Zobrazit | Uložená procedura ||---------+------------+--------------------|| NULL | 1525580473 | NULL |+---------+------------+--------------------+

  1. Typy kurzoru serveru SQL Server – pouze vpřed dynamický kurzor | Kurz SQL Server / Kurz TSQL

  2. IN vs OR Oracle, který rychlejší?

  3. Nastavení časového pásma relace pomocí jara jdbc oracle

  4. Nejlepší způsob, jak se vyhnout duplicitnímu vstupu do databáze mysql