Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von ORIGINAL_DB_NAME() in SQL Server

In SQL Server können Sie den ORIGINAL_DB_NAME() verwenden Funktion, um den Datenbanknamen zurückzugeben, der vom Benutzer in der Datenbankverbindungszeichenfolge angegeben wurde.

Diese Funktion ist nicht mit DB_NAME() zu verwechseln Funktion, die entweder eine bestimmte Datenbank oder die aktuelle zurückgibt.

Wenn Sie zum ersten Mal eine Verbindung zu SQL Server herstellen, haben Sie die Möglichkeit, die Ausgangsdatenbank anzugeben. Beispielsweise bei Verwendung einer Befehlszeilenschnittstelle wie sqlcmd , können Sie das -d verwenden -Parameter, um die anfängliche Datenbank anzugeben. Wenn Sie diesen Parameter nicht verwenden, ist die Standarddatenbank Ihres Logins die anfängliche Datenbank.

Sobald Sie eine Verbindung hergestellt haben, können Sie zu einer anderen Datenbank wechseln, aber Ihre ursprüngliche Datenbank bleibt immer dieselbe. Mit anderen Worten, ORIGINAL_DB_NAME() gibt während Ihrer gesamten Sitzung immer dieselbe Datenbank zurück, auch wenn Sie zu einer anderen Datenbank wechseln.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein einfaches Beispiel.

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Ergebnis:

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

Beispiel 2 – Unterschiedliche Verbindungszeichenfolgen

Dieses Beispiel zeigt, wie die Ausgabe von ORIGINAL_DB_NAME() Die Funktion wird durch die Verbindungszeichenfolge bestimmt.

Betrachten Sie die folgende Verbindungszeichenfolge:

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

Hier verwende ich die mssql-cli Befehlszeilentool zum Herstellen einer Verbindung mit SQL Server. Der Teil, an dem wir interessiert sind, ist -d Music . Dies gibt an, dass die anfängliche Datenbank die Musikdatenbank sein sollte. Mit anderen Worten, sobald ich mich mit SQL Server verbunden habe, ist meine aktuelle Datenbank Musik.

Nachdem ich diesen Code ausgeführt habe (und erfolgreich eine Verbindung zu SQL Server hergestellt habe), kann ich ORIGINAL_DB_NAME() ausführen :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Ergebnis:

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

Lassen Sie uns jetzt eine andere Verbindung öffnen, aber diesmal gebe ich eine andere Datenbank an:

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

Führen Sie nun ORIGINAL_DB_NAME() aus :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Ergebnis:

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

Beispiel 3 – Datenbank wechseln

Folgendes passiert, wenn ich zu einer anderen Datenbank wechsle und die Anweisung erneut ausführe:

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

Ergebnis:

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

Die ursprüngliche Datenbank bleibt gleich.

Hier nochmal im Vergleich mit DB_NAME() Funktion:

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

Ergebnis:

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

Beispiel 4 – Standarddatenbank

Folgendes passiert, wenn ich in der Verbindungszeichenfolge nicht explizit eine Datenbank angebe:

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

Führen Sie nun ORIGINAL_DB_NAME() aus :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Ergebnis:

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

In diesem Fall wird die Standarddatenbank für diesen Benutzer verwendet.