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

DB_NAME() vs ORIGINAL_DB_NAME() no SQL Server:Qual é a diferença?


Duas das funções de metadados disponíveis no SQL Server incluem DB_NAME() e ORIGINAL_DB_NAME() . Ambas as funções são semelhantes, pois retornam o nome de um banco de dados. Mas também são diferentes. Você definitivamente não quer confundir os dois, pois eles servem a propósitos diferentes.

Em poucas palavras, cada função funciona da seguinte forma:
  • DB_NAME() retorna o nome de um banco de dados especificado. Se você não especificar explicitamente um banco de dados, ele retornará o banco de dados atual.
  • ORIGINAL_DB_NAME() retorna o nome do banco de dados especificado pelo usuário na string de conexão do banco de dados.


Exemplo 1 – Conexão inicial


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

Esta é a string de conexão que forneci ao usar o mssql-cli ferramenta de linha de comando para se conectar ao SQL Server.

Esta cadeia de conexão inclui -d WideWorldImporters , o que significa que o banco de dados WideWorldImporters será o banco de dados inicial. Assim que eu me conectar ao SQL Server, meu banco de dados atual será WideWorldImporters.

Aqui está o que eu recebo quando executo ambas as funções depois de fazer login com a string de conexão acima:
SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Resultado:
+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| WideWorldImporters | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

Exemplo 2 – 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 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Resultado:
+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| Music              | WideWorldImporters  | MyDB               |
+--------------------+---------------------+--------------------+

O banco de dados atual muda, mas o banco de dados original permanece o mesmo. A terceira coluna também permanece a mesma porque especifiquei o mesmo ID do banco de dados (5 ) ao chamar DB_NAME() .

Exemplo 3 - 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 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Resultado:
+--------------------+---------------------+--------------------+
| Current Database   | Original Database   | Another Database   |
|--------------------+---------------------+--------------------|
| master             | master              | MyDB               |
+--------------------+---------------------+--------------------+

O banco de dados padrão para esse usuário é usado, que neste caso é o banco de dados mestre.