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

DB_NAME() vs. ORIGINAL_DB_NAME() in SQL Server:Was ist der Unterschied?

Zwei der in SQL Server verfügbaren Metadatenfunktionen sind DB_NAME() und ORIGINAL_DB_NAME() . Beide Funktionen ähneln sich darin, dass sie den Namen einer Datenbank zurückgeben. Aber sie sind auch anders. Sie sollten die beiden auf keinen Fall verwechseln, da sie unterschiedlichen Zwecken dienen.

Kurz gesagt funktioniert jede Funktion wie folgt:

  • DB_NAME() gibt den Namen einer angegebenen Datenbank zurück. Wenn Sie keine Datenbank explizit angeben, wird die aktuelle Datenbank zurückgegeben.
  • ORIGINAL_DB_NAME() gibt den Datenbanknamen zurück, der vom Benutzer in der Datenbankverbindungszeichenfolge angegeben wurde.

Beispiel 1 – Erstverbindung

Betrachten Sie die folgende Verbindungszeichenfolge:

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

Dies ist die Verbindungszeichenfolge, die ich bei der Verwendung von mssql-cli bereitgestellt habe Befehlszeilentool zum Herstellen einer Verbindung mit SQL Server.

Diese Verbindungszeichenfolge enthält -d WideWorldImporters , was bedeutet, dass die WideWorldImporters-Datenbank die anfängliche Datenbank ist. Sobald ich mich mit SQL Server verbunden habe, ist meine aktuelle Datenbank WideWorldImporters.

Folgendes erhalte ich, wenn ich beide Funktionen ausführe, nachdem ich mich mit der obigen Verbindungszeichenfolge angemeldet habe:

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

Ergebnis:

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

Beispiel 2 – Datenbank wechseln

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

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

Ergebnis:

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

Die aktuelle Datenbank ändert sich, aber die ursprüngliche Datenbank bleibt gleich. Auch die dritte Spalte bleibt gleich, weil ich die gleiche Datenbank-ID angegeben habe (5 ) beim Aufruf von DB_NAME() .

Beispiel 3 – 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 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Ergebnis:

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

Die Standarddatenbank für diesen Benutzer wird verwendet, in diesem Fall die Master-Datenbank.