Jeden rozdíl mezi OBJECT_ID()
a OBJECT_NAME()
v SQL Server je syntaxe používaná pro mezidatabázové dotazy. Tím myslím, když jsou použity na objektech v jiné databázi.
OBJECT_NAME()
Funkce má volitelný argument, který můžete zadat a který určuje ID databáze databáze obsahující objekt, jehož název se pokoušíte získat. Uvedení tohoto argumentu vám umožní získat název objektu v jiné databázi.
OBJECT_ID()
funkce na druhé straně takový argument nevyžaduje. Místo toho vám tato funkce umožňuje použít 3dílný název k určení databáze, schématu a názvu objektu, jehož ID se snažíte získat.
Tento článek obsahuje příklady použití OBJECT_ID()
získat název objektu z jiné databáze.
Příklad 1 – Základní dotaz
Zde je základní příklad, který demonstruje, jak to funguje.
USE WideWorldImportersDW; SELECT OBJECT_ID('Music.dbo.Artists') AS Result;
Výsledek:
+-----------+ | Result | |-----------| | 885578193 | +-----------+
Zde jsem přešel na WideWorldImportersDW
databázi a poté se zeptal na název objektu v Music
databáze.
Příklad 2 – Porovnání s aktuální databází
Ve výchozím nastavení SQL Server předpokládá, že název objektu je v kontextu aktuální databáze. Pokud tedy nepoužijete 3dílný název k určení objektu v jiné databázi, databázový stroj SQL Server bude hledat pouze v aktuální databázi.
Zde je stejný kód z předchozího příkladu, kromě toho, že tentokrát uvádím 1 část a 2 názvy částí. Kód jsem také spustil dvakrát:poprvé v Music
při druhém spuštění v WideWorldImportersDW
databáze:
USE Music; SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name]; USE WideWorldImportersDW; SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];
Výsledek:
Changed database context to 'Music'. +---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | 885578193 | 885578193 | 885578193 | +---------------+---------------+---------------+ (1 row affected) Changed database context to 'WideWorldImportersDW'. +---------------+---------------+---------------+ | 1 Part Name | 2 Part Name | 3 Part Name | |---------------+---------------+---------------| | NULL | NULL | 885578193 | +---------------+---------------+---------------+ (1 row affected)
V prvním výsledku vrátí všechny tři sloupce správné ID. Je to proto, že aktuální databáze je Music
a tam se objekt nachází.
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.
Pokud by obě databáze měly objekt s rozsahem schématu s názvem Artists
pak bychom mohli mít jiný výsledek. V takových případech by bylo snadné mylně předpokládat, že výsledek je správný, i když ve skutečnosti není.