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

Jak používat OBJECT_ID() na mezidatabázových objektech na serveru SQL Server

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í.


  1. Nezodpovězené otázky o zabezpečení MS SQL Server a řízení přístupu

  2. Použijte proměnnou s TOP v příkazu select na serveru SQL Server, aniž by byla dynamická

  3. 4 klíčové aktivity monitorování databáze, které by měl znát každý správce databáze

  4. Jak převést řetězec na hexadecimální v MySQL – HEX()