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

Cómo funciona ORIGINAL_DB_NAME() en SQL Server

En SQL Server, puede usar ORIGINAL_DB_NAME() para devolver el nombre de la base de datos especificado por el usuario en la cadena de conexión de la base de datos.

Esta función no debe confundirse con DB_NAME() función, que devuelve una base de datos específica o la actual.

Cuando se conecta por primera vez a SQL Server, tiene la opción de especificar la base de datos inicial. Por ejemplo, al usar una interfaz de línea de comandos como sqlcmd , puede usar -d parámetro para especificar la base de datos inicial. Si no utiliza este parámetro, la base de datos predeterminada de su inicio de sesión será la base de datos inicial.

Una vez que se conecta, puede cambiar a una base de datos diferente, pero su base de datos original siempre será la misma. En otras palabras, ORIGINAL_DB_NAME() siempre devolverá la misma base de datos a lo largo de su sesión, incluso si cambia a una base de datos diferente.

Ejemplo 1:uso básico

Este es un ejemplo básico.

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

Ejemplo 2:diferentes cadenas de conexión

Este ejemplo demuestra cómo la salida de ORIGINAL_DB_NAME() la función está determinada por la cadena de conexión.

Considere la siguiente cadena de conexión:

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

Aquí, uso el mssql-cli herramienta de línea de comandos para conectarse a SQL Server. La parte que nos interesa es -d Music . Esto especifica que la base de datos inicial debe ser la base de datos de música. En otras palabras, una vez que me haya conectado a SQL Server, mi base de datos actual será Música.

Entonces, después de ejecutar ese código (y conectarme con éxito a SQL Server), puedo ejecutar ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:

+---------------------+
| Original Database   |
|---------------------|
| Music               |
+---------------------+

Ahora, abramos otra conexión, pero esta vez especificaré una base de datos diferente:

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

Ahora ejecuta ORIGINAL_DB_NAME() :

SELECT ORIGINAL_DB_NAME() AS [Original Database];

Resultado:

+---------------------+
| Original Database   |
|---------------------|
| WideWorldImporters  |
+---------------------+

Ejemplo 3: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 ORIGINAL_DB_NAME() AS [Original Database];

Resultado:

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

La base de datos original sigue siendo la misma.

Aquí está de nuevo en comparación con DB_NAME() función:

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)

Ejemplo 4: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 ORIGINAL_DB_NAME() AS [Original Database];

Resultado:

+---------------------+
| Original Database   |
|---------------------|
| master              |
+---------------------+

En este caso, se utiliza la base de datos predeterminada para ese usuario.