Dans SQL Server, vous pouvez utiliser le FILE_IDEX()
fonction pour renvoyer l'ID d'un fichier de base de données donné.
Pour ce faire, passez le nom de fichier logique du fichier de base de données à la fonction. C'est le nom qui correspond au name
colonne dans sys.master_files
vue catalogue ou les sys.database_files
vue du catalogue. Ces vues contiennent également l'ID de fichier, mais FILE_NAME()
vous évite d'avoir à interroger ces vues.
Exemple 1 - Utilisation de base
Voici un exemple rapide à démontrer.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Résultat :
+----------+ | Result | |----------| | 1 | +----------+
Exemple 2 – Plus de fichiers
Voici un autre exemple, renvoyant cette fois trois fichiers.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
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_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Résultat :
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Les noms de fichiers sont différents pour cette base de données. De plus, concernant la troisième colonne, il n'y a pas de fichier portant ce nom, nous obtenons donc un résultat NULL.
Exemple 4 - Utilisation de sys.database_files
Comme mentionné, le FILE_IDEX()
la fonction vous évite d'avoir à interroger les sys.database_files
ou sys.master_files
vues. Si nous n'avions pas le FILE_IDEX()
fonction, nous devrions faire quelque chose comme ceci :
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Résultat :
+-----------+ | file_id | |-----------| | 1 | +-----------+
Exemple 5 – Utilisation de sys.master_files
Voici une requête similaire pour sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Résultat :
+-----------+ | file_id | |-----------| | 1 | +-----------+
Cette vue est une vue à l'échelle du système et peut renvoyer des données de toutes les bases de données. Par conséquent, j'ajoute la base de données actuelle (en utilisant DB_ID()
) dans le WHERE
de la requête clause.