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.