En SQL Server, puede usar FILE_NAME()
función para devolver el nombre de archivo lógico de un archivo de base de datos dado.
Para hacer esto, pase el ID del archivo a la función. Este es el ID que corresponde al file_id
columna en sys.master_files
vista de catálogo o sys.database_files
vista de catálogo. Esas vistas también contienen el nombre de archivo lógico, pero el 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_NAME(1) AS Result;
Resultado:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Ejemplo 2:más archivos
Aquí hay otro ejemplo, esta vez devolviendo tres archivos.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
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_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Resultado:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
En este caso, no hay ningún archivo con una ID de 3, por lo que obtengo un resultado NULL para esa columna.
Ejemplo 4:usar sys.database_files
Como se mencionó, el FILE_NAME()
le evita tener que consultar los sys.database_files
o sys.master_files
puntos de vista. Si no tuviéramos el FILE_NAME()
función, probablemente tendríamos que hacer algo como esto:
SELECT name FROM sys.database_files WHERE file_id = 2;
Resultado:
+-----------+ | name | |-----------| | Music_log | +-----------+
Ejemplo 5:uso de sys.master_files
Si usamos sys.master_files
, necesitaríamos agregar algo de código para especificar qué base de datos:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Resultado:
+-----------+ | name | |-----------| | Music_log | +-----------+
Con esta vista, si no especifica el ID de la base de datos, obtendrá resultados de todas las bases de datos. Por lo tanto, especifico qué base de datos en WHERE
cláusula. En este caso uso el DB_ID()
función para obtener el nombre de la base de datos actual.