sql >> Database >  >> RDS >> Sqlserver

DB_NAME() versus ORIGINAL_DB_NAME() in SQL Server:wat is het verschil?

Twee van de metadatafuncties die beschikbaar zijn in SQL Server omvatten DB_NAME() en ORIGINAL_DB_NAME() . Beide functies zijn vergelijkbaar in die zin dat ze de naam van een database retourneren. Maar ze zijn ook anders. Je wilt de twee zeker niet met elkaar verwarren, omdat ze verschillende doelen dienen.

In een notendop werkt elke functie als volgt:

  • DB_NAME() retourneert de naam van een opgegeven database. Als u niet expliciet een database opgeeft, wordt de huidige database geretourneerd.
  • ORIGINAL_DB_NAME() geeft de databasenaam terug die door de gebruiker is opgegeven in de databaseverbindingsreeks.

Voorbeeld 1 – Eerste verbinding

Houd rekening met de volgende verbindingsreeks:

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

Dit is de verbindingsreeks die ik heb opgegeven bij het gebruik van de mssql-cli opdrachtregelprogramma om verbinding te maken met SQL Server.

Deze verbindingsreeks bevat -d WideWorldImporters , wat betekent dat de WideWorldImporters-database de eerste database zal zijn. Zodra ik verbinding heb met SQL Server, is mijn huidige database WideWorldImporters.

Dit is wat ik krijg als ik beide functies uitvoer nadat ik me heb aangemeld met de bovenstaande verbindingsreeks:

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

Resultaat:

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

Voorbeeld 2 – Van database wisselen

Dit is wat er gebeurt als ik naar een andere database overschakel en de instructie opnieuw uitvoer:

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

Resultaat:

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

De huidige database verandert, maar de originele database blijft hetzelfde. De derde kolom blijft ook hetzelfde omdat ik dezelfde database-ID heb opgegeven (5 ) bij het aanroepen van DB_NAME() .

Voorbeeld 3 – Standaarddatabase

Dit is wat er gebeurt als ik niet expliciet een database specificeer in de verbindingsreeks:

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

Voer nu ORIGINAL_DB_NAME() . uit :

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

Resultaat:

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

De standaarddatabase voor die gebruiker wordt gebruikt, in dit geval de hoofddatabase.


  1. welke jdbc jar te gebruiken met oracle 11g &jdk 1.6 en hoe verbinding te maken met de db zelf

  2. nodejs mysql Fout:Verbinding verbroken De server heeft de verbinding verbroken

  3. Hoe krijg ik de grenscoördinaten voor een Amerikaanse postcode?

  4. Hoe voeg ik meerdere waarden tegelijk in een postgres-tabel in?