sql >> Databasteknik >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() i SQL Server:Vad är skillnaden?

Två av metadatafunktionerna som är tillgängliga i SQL Server inkluderar DB_NAME() och ORIGINAL_DB_NAME() . Båda funktionerna är lika genom att de returnerar namnet på en databas. Men de är också olika. Du vill definitivt inte blanda ihop de två, eftersom de tjänar olika syften.

I ett nötskal fungerar varje funktion enligt följande:

  • DB_NAME() returnerar namnet på en specificerad databas. Om du inte uttryckligen anger en databas returnerar den den aktuella databasen.
  • ORIGINAL_DB_NAME() returnerar databasnamnet som anges av användaren i databasanslutningssträngen.

Exempel 1 – Initial anslutning

Tänk på följande anslutningssträng:

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

Det här är anslutningssträngen jag angav när jag använde mssql-cli kommandoradsverktyg för att ansluta till SQL Server.

Denna anslutningssträng inkluderar -d WideWorldImporters , vilket innebär att WideWorldImporters-databasen kommer att vara den första databasen. När jag väl blir ansluten till SQL Server kommer min nuvarande databas att vara WideWorldImporters.

Det här är vad jag får när jag kör båda funktionerna efter att ha loggat in med ovanstående anslutningssträng:

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

Resultat:

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

Exempel 2 – Byt databas

Så här händer om jag byter till en annan databas och kör satsen igen:

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

Resultat:

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

Den aktuella databasen ändras, men den ursprungliga databasen förblir densamma. Den tredje kolumnen förblir också densamma eftersom jag angav samma databas-ID (5 ) när du anropar DB_NAME() .

Exempel 3 – Standarddatabas

Så här händer om jag inte uttryckligen anger en databas i anslutningssträngen:

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

Kör nu ORIGINAL_DB_NAME() :

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

Resultat:

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

Standarddatabasen för den användaren används, vilket i det här fallet är huvuddatabasen.


  1. Hur man bygger en obegränsad nivå av meny genom PHP och mysql

  2. Hash-anslutningar på nullbara kolumner

  3. PostgreSQL 9.6:Parallell Sequential Scan

  4. Hur man använder KNN Machine Learning Model med 2UDA – PostgreSQL och Orange (Del 1)