To af de tilgængelige metadatafunktioner i SQL Server inkluderer DB_NAME()
og ORIGINAL_DB_NAME()
. Begge funktioner ligner hinanden, idet de returnerer navnet på en database. Men de er også forskellige. Du ønsker bestemt ikke at forveksle de to, da de tjener forskellige formål.
I en nøddeskal fungerer hver funktion som følger:
DB_NAME()
returnerer navnet på en specificeret database. Hvis du ikke udtrykkeligt angiver en database, returnerer den den aktuelle database.ORIGINAL_DB_NAME()
returnerer databasenavnet angivet af brugeren i databaseforbindelsesstrengen.
Eksempel 1 – Indledende forbindelse
Overvej følgende forbindelsesstreng:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
Dette er den forbindelsesstreng, jeg har angivet, når jeg brugte mssql-cli kommandolinjeværktøj til at oprette forbindelse til SQL Server.
Denne forbindelsesstreng inkluderer -d WideWorldImporters
, hvilket betyder, at WideWorldImporters-databasen vil være den oprindelige database. Når jeg får forbindelse til SQL Server, vil min nuværende database være WideWorldImporters.
Her er, hvad jeg får, når jeg kører begge funktioner efter at have logget ind med ovenstående forbindelsesstreng:
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 | +--------------------+---------------------+--------------------+
Eksempel 2 – Skift database
Her er hvad der sker, hvis jeg skifter til en anden database og kører sætningen 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 aktuelle database ændres, men den oprindelige database forbliver den samme. Den tredje kolonne forbliver også den samme, fordi jeg har angivet det samme database-id (5
) når du kalder DB_NAME()
.
Eksempel 3 – Standarddatabase
Her er, hvad der sker, hvis jeg ikke eksplicit angiver en database i forbindelsesstrengen:
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 for den bruger bruges, som i dette tilfælde er masterdatabasen.