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.