In SQL Server puoi utilizzare ORIGINAL_DB_NAME()
funzione per restituire il nome del database specificato dall'utente nella stringa di connessione al database.
Questa funzione non deve essere confusa con DB_NAME()
funzione, che restituisce un database specifico o quello corrente.
Quando si effettua per la prima volta una connessione a SQL Server, è possibile specificare il database iniziale. Ad esempio, quando si utilizza un'interfaccia a riga di comando come sqlcmd , puoi usare -d
parametro per specificare il database iniziale. Se non utilizzi questo parametro, il database predefinito del tuo login sarà il database iniziale.
Dopo esserti connesso, puoi passare a un database diverso, ma il tuo database originale sarà sempre lo stesso. In altre parole, ORIGINAL_DB_NAME()
restituirà sempre lo stesso database per tutta la sessione, anche se passi a un database diverso.
Esempio 1 – Utilizzo di base
Ecco un esempio di base.
SELECT ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
+---------------------+ | Original Database | |---------------------| | master | +---------------------+
Esempio 2:stringhe di connessione diverse
Questo esempio mostra come l'output di ORIGINAL_DB_NAME()
funzione è determinata dalla stringa di connessione.
Considera la seguente stringa di connessione:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d Music
Qui uso mssql-cli strumento da riga di comando per connettersi a SQL Server. La parte che ci interessa è -d Music
. Questo specifica che il database iniziale dovrebbe essere il database Music. In altre parole, una volta connesso a SQL Server, il mio database attuale sarà Music.
Quindi, dopo aver eseguito quel codice (e connesso con successo a SQL Server), posso eseguire ORIGINAL_DB_NAME()
:
SELECT ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
+---------------------+ | Original Database | |---------------------| | Music | +---------------------+
Ora apriamo un'altra connessione, ma questa volta specificherò un database diverso:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters
Ora esegui ORIGINAL_DB_NAME()
:
SELECT ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
+---------------------+ | Original Database | |---------------------| | WideWorldImporters | +---------------------+
Esempio 3 – Cambia database
Ecco cosa succede se passo a un database diverso ed eseguo nuovamente l'istruzione:
USE Music; SELECT ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
Changed database context to 'Music'. +---------------------+ | Original Database | |---------------------| | WideWorldImporters | +---------------------+ (1 row affected)
Il database originale rimane lo stesso.
Eccolo di nuovo se confrontato con DB_NAME()
funzione:
USE Music; SELECT DB_NAME() AS [Current Database], ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
Changed database context to 'Music'. +--------------------+---------------------+ | Current Database | Original Database | |--------------------+---------------------| | Music | WideWorldImporters | +--------------------+---------------------+ (1 row affected)
Esempio 4 – 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 ORIGINAL_DB_NAME() AS [Original Database];
Risultato:
+---------------------+ | Original Database | |---------------------| | master | +---------------------+
In questo caso, viene utilizzato il database predefinito per quell'utente.