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.