sql >> Database teknologi >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() i SQL Server:Hvad er forskellen?

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.


  1. ROWIDTONCHAR() Funktion i Oracle

  2. Ti almindelige trusler mod eksekveringsplanens kvalitet

  3. Få en liste over understøttede tidszoner i SQL Server (T-SQL)

  4. 5 tegn på, at du er vokset ud af Excel