Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

DB_NAME() срещу ORIGINAL_DB_NAME() в SQL Server:Каква е разликата?

Две от функциите за метаданни, налични в SQL Server, включват DB_NAME() и ORIGINAL_DB_NAME() . И двете функции са сходни по това, че връщат името на база данни. Но и те са различни. Определено не искате да бъркате двете, тъй като те служат за различни цели.

Накратко, всяка функция работи по следния начин:

  • DB_NAME() връща името на определена база данни. Ако не посочите изрично база данни, тя връща текущата база данни.
  • ORIGINAL_DB_NAME() връща името на базата данни, посочено от потребителя в низа за връзка с базата данни.

Пример 1 – Първоначално свързване

Помислете за следния низ за връзка:

mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters

Това е низът за връзка, който предоставих, когато използвах mssql-cli инструмент за команден ред за свързване към SQL Server.

Този низ за връзка включва -d WideWorldImporters , което означава, че базата данни WideWorldImporters ще бъде първоначалната база данни. След като се свържа със SQL Server, текущата ми база данни ще бъде WideWorldImporters.

Ето какво получавам, когато стартирам и двете функции, след като вляза с горния низ за връзка:

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Резултат:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| WideWorldImporters | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

Пример 2 – Превключване на бази данни

Ето какво се случва, ако превключя към друга база данни и изпълня изявлението отново:

USE Music;
SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Резултат:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| Music              | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

Текущата база данни се променя, но оригиналната база данни остава същата. Третата колона също остава същата, защото посочих същия идентификатор на базата данни (5 ) при извикване на DB_NAME() .

Пример 3 – База данни по подразбиране

Ето какво се случва, ако не посоча изрично база данни в низа за връзка:

mssql-cli -S localhost -U sa -P bigStrongPassword!!!

Сега стартирайте ORIGINAL_DB_NAME() :

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Резултат:

+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| master             | master              | MyDB               |
+--------------------+---------------------+--------------------+

Използва се базата данни по подразбиране за този потребител, която в този случай е главната база данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Където стойност в колона, съдържаща стойности, разделени със запетая

  2. Производителност на SQL сървър TOP IO заявка -1

  3. Как да конвертирате стойностите на редовете в колони с динамичен брой колони?

  4. Мониторинг на изпълняваните заявки на SQL Server

  5. Получавам съобщение. Беше направен опит за зареждане на програма с грешка при неправилен формат в проект за репликация на SQL Server