sql >> Databasteknik >  >> RDS >> Sqlserver

Hur ORIGINAL_DB_NAME() fungerar i SQL Server

I SQL Server kan du använda ORIGINAL_DB_NAME() funktion för att returnera databasnamnet som anges av användaren i databasanslutningssträngen.

Denna funktion ska inte förväxlas med DB_NAME() funktion, som returnerar antingen en specifik databas eller den aktuella.

När du först gör en anslutning till SQL Server har du möjlighet att ange den ursprungliga databasen. Till exempel när du använder ett kommandoradsgränssnitt som sqlcmd , kan du använda -d parameter för att ange den ursprungliga databasen. Om du inte använder den här parametern kommer din inloggnings standarddatabas att vara den ursprungliga databasen.

När du väl har anslutit kan du byta till en annan databas, men din ursprungliga databas kommer alltid att vara densamma. Med andra ord, ORIGINAL_DB_NAME() kommer alltid att returnera samma databas under hela din session, även om du byter till en annan databas.

Exempel 1 – Grundläggande användning

Här är ett grundläggande exempel.

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultat:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Exempel 2 – Olika anslutningssträngar

Det här exemplet visar hur utdata från ORIGINAL_DB_NAME() funktionen bestäms av anslutningssträngen.

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

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

Här använder jag mssql-cli kommandoradsverktyg för att ansluta till SQL Server. Delen vi är intresserade av är -d Music . Detta anger att den ursprungliga databasen ska vara musikdatabasen. Med andra ord, när jag väl har anslutit till SQL Server kommer min nuvarande databas att vara Musik.

Så efter att ha kört den koden (och lyckats ansluta till SQL Server) kan jag köra ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultat:

+---------------------+
| Original Database   |
|---------------------|
| Music               |
+---------------------+

Nu, låt oss öppna en annan anslutning, men den här gången ska jag specificera en annan databas:

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

Kör nu ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultat:

+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+

Exempel 3 – Byt databas

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

USE Music;
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultat:

Changed database context to 'Music'.
+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+
(1 row affected)

Den ursprungliga databasen förblir densamma.

Här är den igen jämfört med DB_NAME() funktion:

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

Resultat:

Changed database context to 'Music'.
+--------------------+---------------------+
| Current Database   | Original Database   |
|--------------------+---------------------|
| Music              | WideWorldImporters  |
+--------------------+---------------------+
(1 row affected)

Exempel 4 – 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 ORIGINAL_DB_NAME() AS [Original Database];

Resultat:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

I det här fallet används standarddatabasen för den användaren.


  1. UNIK begränsning kontra kontroll före INSERT

  2. Beräkna din SQL Server Monitoring Total Cost of Ownership

  3. Returnera en fråga från en funktion?

  4. Hur kör man samma fråga på alla databaser på en instans?