Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

DB_NAME() vs ORIGINAL_DB_NAME() dans SQL Server :Quelle est la différence ?

Deux des fonctions de métadonnées disponibles dans SQL Server incluent DB_NAME() et ORIGINAL_DB_NAME() . Les deux fonctions sont similaires en ce sens qu'elles renvoient le nom d'une base de données. Mais ils sont aussi différents. Vous ne voulez certainement pas confondre les deux, car ils ont des objectifs différents.

En bref, chaque fonction fonctionne comme suit :

  • DB_NAME() renvoie le nom d'une base de données spécifiée. Si vous ne spécifiez pas explicitement une base de données, il renvoie la base de données actuelle.
  • ORIGINAL_DB_NAME() renvoie le nom de la base de données spécifié par l'utilisateur dans la chaîne de connexion à la base de données.

Exemple 1 – Connexion initiale

Considérez la chaîne de connexion suivante :

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

Il s'agit de la chaîne de connexion que j'ai fournie lors de l'utilisation de mssql-cli outil de ligne de commande pour se connecter à SQL Server.

Cette chaîne de connexion inclut -d WideWorldImporters , ce qui signifie que la base de données WideWorldImporters sera la base de données initiale. Une fois connecté à SQL Server, ma base de données actuelle sera WideWorldImporters.

Voici ce que j'obtiens lorsque j'exécute les deux fonctions après m'être connecté avec la chaîne de connexion ci-dessus :

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Résultat :

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

Exemple 2 – Changer de base de données

Voici ce qui se passe si je passe à une autre base de données et exécute à nouveau l'instruction :

USE Music;
SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Résultat :

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

La base de données actuelle change, mais la base de données d'origine reste la même. La troisième colonne reste également la même car j'ai spécifié le même ID de base de données (5 ) lors de l'appel de DB_NAME() .

Exemple 3 – Base de données par défaut

Voici ce qui se passe si je ne spécifie pas explicitement une base de données dans la chaîne de connexion :

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

Exécutez maintenant ORIGINAL_DB_NAME() :

SELECT 
  DB_NAME() AS [Current Database],
  ORIGINAL_DB_NAME() AS [Original Database],
  DB_NAME(5) AS [Another Database];

Résultat :

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

La base de données par défaut pour cet utilisateur est utilisée, qui dans ce cas est la base de données principale.