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

Utilisez FILE_NAME() pour renvoyer le nom de fichier logique pour un ID de fichier donné dans SQL Server

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.