Dans SQL Server, vous pouvez utiliser le FILE_NAME()
fonction pour renvoyer le nom de fichier logique d'un fichier de base de données donné.
Pour ce faire, transmettez l'ID de fichier à la fonction. C'est l'ID qui correspond au file_id
colonne dans sys.master_files
vue catalogue ou les sys.database_files
vue du catalogue. Ces vues contiennent également le nom de fichier logique, mais le FILE_NAME()
vous évite d'avoir à interroger ces vues.
Exemple 1 - Utilisation de base
Voici un exemple rapide à démontrer.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Résultat :
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Exemple 2 – Plus de fichiers
Voici un autre exemple, renvoyant cette fois trois fichiers.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Résultat :
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Exemple 3 - Base de données différente
Dans cet exemple, je passe à une autre base de données, puis j'exécute à nouveau la requête.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Résultat :
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
Dans ce cas, il n'y a pas de fichier avec un ID de 3, donc j'obtiens un résultat NULL pour cette colonne.
Exemple 4 - Utilisation de sys.database_files
Comme mentionné, le FILE_NAME()
la fonction vous évite d'avoir à interroger les sys.database_files
ou sys.master_files
vues. Si nous n'avions pas le FILE_NAME()
fonction, nous devrions probablement faire quelque chose comme ceci :
SELECT name FROM sys.database_files WHERE file_id = 2;
Résultat :
+-----------+ | name | |-----------| | Music_log | +-----------+
Exemple 5 – Utilisation de sys.master_files
Si nous avons utilisé sys.master_files
, nous aurions besoin d'ajouter du code pour spécifier quelle base de données :
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Résultat :
+-----------+ | name | |-----------| | Music_log | +-----------+
Avec cette vue, si vous ne spécifiez pas l'ID de la base de données, vous obtiendrez les résultats de toutes les bases de données. Je précise donc quelle base de données dans le WHERE
clause. Dans ce cas j'utilise le DB_ID()
fonction pour obtenir le nom de la base de données actuelle.