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

Utilisez FILE_IDEX() pour renvoyer l'ID d'un fichier de base de données dans SQL Server

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.