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

DB_NAME() vs ORIGINAL_DB_NAME() in SQL Server:qual è la differenza?

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.