Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona ORIGINAL_DB_NAME() in SQL Server

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.