Due delle funzioni di metadati disponibili in SQL Server includono DB_NAME()
e ORIGINAL_DB_NAME()
. Entrambe le funzioni sono simili in quanto restituiscono il nome di un database. Ma sono anche diversi. Sicuramente non vuoi confondere i due, poiché hanno scopi diversi.
In poche parole, ogni funzione funziona come segue:
DB_NAME()
restituisce il nome di un database specificato. Se non specifichi in modo esplicito un database, restituisce il database corrente.ORIGINAL_DB_NAME()
restituisce il nome del database specificato dall'utente nella stringa di connessione al database.
Esempio 1 – Connessione iniziale
Considera la seguente stringa di connessione:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
Questa è la stringa di connessione che ho fornito durante l'utilizzo di mssql-cli strumento da riga di comando per connettersi a SQL Server.
Questa stringa di connessione include -d WideWorldImporters
, il che significa che il database WideWorldImporters sarà il database iniziale. Una volta connesso a SQL Server, il mio database attuale sarà WideWorldImporters.
Ecco cosa ottengo quando eseguo entrambe le funzioni dopo aver effettuato l'accesso con la stringa di connessione sopra:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Risultato:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | WideWorldImporters | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Esempio 2 – Cambia database
Ecco cosa succede se passo a un database diverso ed eseguo nuovamente l'istruzione:
USE Music; SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Risultato:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | Music | WideWorldImporters | MyDB | +--------------------+---------------------+--------------------+
Il database corrente cambia, ma il database originale rimane lo stesso. Anche la terza colonna rimane la stessa perché ho specificato lo stesso ID database (5
) quando si chiama DB_NAME()
.
Esempio 3 – Database predefinito
Ecco cosa succede se non specifichi esplicitamente un database nella stringa di connessione:
mssql-cli -S localhost -U sa -P bigStrongPassword!!!
Ora esegui ORIGINAL_DB_NAME()
:
SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database], DB_NAME(5) AS [Another Database];
Risultato:
+--------------------+---------------------+--------------------+ | Current Database | Original Database | Another Database | |--------------------+---------------------+--------------------| | master | master | MyDB | +--------------------+---------------------+--------------------+
Viene utilizzato il database predefinito per quell'utente, che in questo caso è il database principale.