Dwie funkcje metadanych dostępne w SQL Server to DB_NAME()
i ORIGINAL_DB_NAME()
. Obie funkcje są podobne pod tym względem, że zwracają nazwę bazy danych. Ale są też inne. Na pewno nie chcesz ich pomylić, ponieważ służą one różnym celom.
Krótko mówiąc, każda funkcja działa w następujący sposób:
DB_NAME()
zwraca nazwę określonej bazy danych. Jeśli nie określisz jawnie bazy danych, zwróci bieżącą bazę danych.ORIGINAL_DB_NAME()
zwraca nazwę bazy danych określoną przez użytkownika w ciągu połączenia z bazą danych.
Przykład 1 – Połączenie początkowe
Rozważ następujące parametry połączenia:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
To są parametry połączenia, które podałem podczas korzystania z mssql-cli narzędzie wiersza poleceń do połączenia z serwerem SQL.
Ten ciąg połączenia zawiera -d WideWorldImporters
, co oznacza, że baza danych WideWorldImporters będzie początkową bazą danych. Gdy połączę się z SQL Server, moją aktualną bazą danych będzie WideWorldImporters.
Oto, co otrzymuję, gdy uruchamiam obie funkcje po zalogowaniu się z powyższymi parametrami połączenia:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Wynik:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | WideWorldImporters | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Przykład 2 – Przełącz bazy danych
Oto, co się stanie, jeśli przełączę się na inną bazę danych i ponownie uruchomię instrukcję:
USE Music; SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Wynik:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | Music | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Bieżąca baza danych ulega zmianie, ale pierwotna baza danych pozostaje taka sama. Trzecia kolumna również pozostaje taka sama, ponieważ określiłem ten sam identyfikator bazy danych (5
) podczas wywoływania DB_NAME()
.
Przykład 3 – Domyślna baza danych
Oto, co się stanie, jeśli nie określę jawnie bazy danych w ciągu połączenia:
mssql-cli -S localhost -U sa -P bigStrongPassword!!!
Teraz uruchom ORIGINAL_DB_NAME()
:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Wynik:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | master | master | MyDB | +--------------------+---------------------+--------------------+
Używana jest domyślna baza danych dla tego użytkownika, która w tym przypadku jest główną bazą danych.