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.