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

Use FILE_NAME() para devolver el nombre de archivo lógico para un ID de archivo dado en SQL Server

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.