Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() w SQL Server:jaka jest różnica?

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można używać wyszukiwania pełnotekstowego (FTS) z LINQ?

  2. Upuść wszystkie tabele, procedury składowane, wyzwalacze, ograniczenia i wszystkie zależności w jednej instrukcji sql

  3. Nieużywany indeks programu SQL Server

  4. Wyrażenia regularne w SQL Server

  5. Instrukcja ALTER TABLE kolidowała z ograniczeniem FOREIGN KEY w SQL Server — SQL Sever / TSQL Tutorial, część 69