Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como ORIGINAL_DB_NAME() funciona no SQL Server


No SQL Server, você pode usar o ORIGINAL_DB_NAME() função para retornar o nome do banco de dados especificado pelo usuário na string de conexão do banco de dados.

Esta função não deve ser confundida com o DB_NAME() função, que retorna um banco de dados específico ou o atual.

Ao fazer uma conexão com o SQL Server pela primeira vez, você tem a opção de especificar o banco de dados inicial. Por exemplo, ao usar uma interface de linha de comando como sqlcmd , você pode usar o -d parâmetro para especificar o banco de dados inicial. Se você não usar este parâmetro, o banco de dados padrão do seu login será o banco de dados inicial.

Depois de se conectar, você pode alternar para um banco de dados diferente, mas seu banco de dados original será sempre o mesmo. Em outras palavras, ORIGINAL_DB_NAME() sempre retornará o mesmo banco de dados em toda a sua sessão, mesmo se você alternar para um banco de dados diferente.


Exemplo 1 – Uso básico


Aqui está um exemplo básico.
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Exemplo 2 – Strings de conexão diferentes


Este exemplo demonstra como a saída do ORIGINAL_DB_NAME() função é determinada pela cadeia de conexão.

Considere a seguinte string de conexão:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d Music

Aqui, eu uso o mssql-cli ferramenta de linha de comando para se conectar ao SQL Server. A parte que nos interessa é -d Music . Isso especifica que o banco de dados inicial deve ser o banco de dados Music. Em outras palavras, uma vez conectado ao SQL Server, meu banco de dados atual será Music.

Então, depois de executar esse código (e conectar com sucesso ao SQL Server), posso executar ORIGINAL_DB_NAME() :
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
+---------------------+
| Original Database   |
|---------------------|
| Music               |
+---------------------+

Agora, vamos abrir outra conexão, mas desta vez especificarei um banco de dados diferente:
mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters

Agora execute ORIGINAL_DB_NAME() :
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+

Exemplo 3 – Alternar bancos de dados


Aqui está o que acontece se eu mudar para um banco de dados diferente e executar a instrução novamente:
USE Music;
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
Changed database context to 'Music'.
+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+
(1 row affected)

O banco de dados original permanece o mesmo.

Aqui está novamente quando comparado com o DB_NAME() função:
USE Music;
SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
Changed database context to 'Music'.
+--------------------+---------------------+
| Current Database   | Original Database   |
|--------------------+---------------------|
| Music              | WideWorldImporters  |
+--------------------+---------------------+
(1 row affected)

Exemplo 4 – Banco de dados padrão


Aqui está o que acontece se eu não especificar explicitamente um banco de dados na string de conexão:
mssql-cli -S localhost -U sa -P bigStrongPassword!!!

Agora execute ORIGINAL_DB_NAME() :
SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:
+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Nesse caso, o banco de dados padrão para esse usuário é usado.