sql >> Base de Datos >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() en SQL Server:¿Cuál es la diferencia?

Dos de las funciones de metadatos disponibles en SQL Server incluyen DB_NAME() y ORIGINAL_DB_NAME() . Ambas funciones son similares en que devuelven el nombre de una base de datos. Pero también son diferentes. Definitivamente no desea confundir los dos, ya que tienen diferentes propósitos.

En pocas palabras, cada función funciona de la siguiente manera:

  • DB_NAME() devuelve el nombre de una base de datos especificada. Si no especifica explícitamente una base de datos, devuelve la base de datos actual.
  • ORIGINAL_DB_NAME() devuelve el nombre de la base de datos especificado por el usuario en la cadena de conexión de la base de datos.

Ejemplo 1:conexión inicial

Considere la siguiente cadena de conexión:

mssql-cli -S localhost -U sa -P bigStrongPassword!!! -d WideWorldImporters

Esta es la cadena de conexión que proporcioné al usar mssql-cli herramienta de línea de comandos para conectarse a SQL Server.

Esta cadena de conexión incluye -d WideWorldImporters , lo que significa que la base de datos de WideWorldImporters será la base de datos inicial. Una vez que me conecte a SQL Server, mi base de datos actual será WideWorldImporters.

Esto es lo que obtengo cuando ejecuto ambas funciones después de iniciar sesión con la cadena de conexión anterior:

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               |
+--------------------+---------------------+--------------------+

Ejemplo 2:cambiar de base de datos

Esto es lo que sucede si cambio a una base de datos diferente y vuelvo a ejecutar la instrucción:

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               |
+--------------------+---------------------+--------------------+

La base de datos actual cambia, pero la base de datos original sigue siendo la misma. La tercera columna también permanece igual porque especifiqué el mismo ID de base de datos (5 ) al llamar a DB_NAME() .

Ejemplo 3:base de datos predeterminada

Esto es lo que sucede si no especifico explícitamente una base de datos en la cadena de conexión:

mssql-cli -S localhost -U sa -P bigStrongPassword!!!

Ahora ejecuta 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               |
+--------------------+---------------------+--------------------+

Se utiliza la base de datos predeterminada para ese usuario, que en este caso es la base de datos maestra.