Dvě z funkcí metadat dostupných na serveru SQL Server zahrnují DB_NAME()
a ORIGINAL_DB_NAME()
. Obě funkce jsou podobné v tom, že vracejí název databáze. Ale jsou také jiné. Rozhodně si je nechcete plést, protože slouží různým účelům.
Stručně řečeno, každá funkce funguje následovně:
DB_NAME()
vrátí název zadané databáze. Pokud databázi explicitně neurčíte, vrátí aktuální databázi.ORIGINAL_DB_NAME()
vrátí název databáze zadaný uživatelem v řetězci připojení k databázi.
Příklad 1 – Počáteční připojení
Zvažte následující připojovací řetězec:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
Toto je připojovací řetězec, který jsem uvedl při použití mssql-cli nástroj příkazového řádku pro připojení k serveru SQL.
Tento připojovací řetězec obsahuje -d WideWorldImporters
, což znamená, že databáze WideWorldImporters bude výchozí databází. Jakmile se připojím k SQL Serveru, moje aktuální databáze bude WideWorldImporters.
Zde je to, co dostanu, když spustím obě funkce po přihlášení pomocí výše uvedeného připojovacího řetězce:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Výsledek:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | WideWorldImporters | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Příklad 2 – Přepnutí databází
Když přepnu na jinou databázi a znovu spustím příkaz, stane se toto:
USE Music; SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Výsledek:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | Music | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Aktuální databáze se změní, ale původní databáze zůstane stejná. Třetí sloupec také zůstává stejný, protože jsem zadal stejné ID databáze (5
) při volání DB_NAME()
.
Příklad 3 – Výchozí databáze
Co se stane, pokud v připojovacím řetězci explicitně neurčím databázi:
mssql-cli -S localhost -U sa -P bigStrongPassword!!!
Nyní spusťte ORIGINAL_DB_NAME()
:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Výsledek:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | master | master | MyDB | +--------------------+---------------------+--------------------+
Použije se výchozí databáze pro daného uživatele, což je v tomto případě hlavní databáze.