sql >> Base de Datos >  >> RDS >> Sqlserver

Use FILE_IDEX() para devolver la ID de un archivo de base de datos en SQL Server

En SQL Server, puede usar FILE_IDEX() función para devolver el ID de un archivo de base de datos dado.

Para hacer esto, pase el nombre de archivo lógico del archivo de la base de datos a la función. Este es el nombre que corresponde al name columna en sys.master_files vista de catálogo o sys.database_files vista de catálogo. Esas vistas también contienen el ID del archivo, pero FILE_NAME() le evita tener que consultar esas vistas.

Ejemplo 1:uso básico

Aquí hay un ejemplo rápido para demostrarlo.

USE WideWorldImportersDW;
SELECT FILE_IDEX('WWI_Primary') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Ejemplo 2:más archivos

Aquí hay otro ejemplo, esta vez devolviendo tres archivos.

USE WideWorldImportersDW;
SELECT 
  FILE_IDEX('WWI_Primary') AS WWI_Primary,
  FILE_IDEX('WWI_Log') AS WWI_Log,
  FILE_IDEX('WWI_UserData') AS WWI_UserData;

Resultado:

+-------------+----------+--------------+
| File 1      | File 2   | File 3       |
|-------------+----------+--------------|
| WWI_Primary | WWI_Log  | WWI_UserData |
+-------------+----------+--------------+

Ejemplo 3:base de datos diferente

En este ejemplo, cambio a una base de datos diferente y luego vuelvo a ejecutar la consulta.

USE Music;
SELECT 
  FILE_IDEX('Music') AS Music,
  FILE_IDEX('Music_Log') AS Music_Log,
  FILE_IDEX('Music_UserData') AS Music_UserData;

Resultado:

+---------+-------------+------------------+
| Music   | Music_Log   | Music_UserData   |
|---------+-------------+------------------|
| 1       | 2           | NULL             |
+---------+-------------+------------------+

Los nombres de archivo son diferentes para esta base de datos. Además, con respecto a la tercera columna, no hay ningún archivo con ese nombre, por lo que obtenemos un resultado NULL.

Ejemplo 4:usar sys.database_files

Como se mencionó, el FILE_IDEX() le evita tener que consultar los sys.database_files o sys.master_files puntos de vista. Si no tuviéramos el FILE_IDEX() función, tendríamos que hacer algo como esto:

USE WideWorldImportersDW;
SELECT file_id
FROM sys.database_files
WHERE name = 'WWI_Primary';

Resultado:

+-----------+
| file_id   |
|-----------|
| 1         |
+-----------+

Ejemplo 5:uso de sys.master_files

Aquí hay una consulta similar para sys.master_files :

SELECT file_id 
FROM sys.master_files
WHERE name = 'WWI_Primary'
AND database_id = DB_ID();

Resultado:

+-----------+
| file_id   |
|-----------|
| 1         |
+-----------+

Esta vista es una vista de todo el sistema y puede devolver datos de todas las bases de datos. Por lo tanto, agrego la base de datos actual (usando DB_ID() ) en el WHERE de la consulta cláusula.