В SQL Server можете да използвате FILE_NAME()
функция за връщане на логическото име на файл на даден файл на базата данни.
За да направите това, предайте идентификатора на файла на функцията. Това е идентификаторът, който съответства на file_id
колона в sys.master_files
изглед на каталог или sys.database_files
изглед на каталог. Тези изгледи също съдържат логическото име на файла, но FILE_NAME()
функцията ви спестява от необходимостта да заявявате тези изгледи.
Пример 1 – Основна употреба
Ето един бърз пример за демонстрация.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Резултат:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Пример 2 – Още файлове
Ето още един пример, този път връща три файла.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Резултат:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Пример 3 – Различна база данни
В този пример преминавам към друга база данни, след което стартирам заявката отново.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Резултат:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
В този случай няма файл с идентификатор 3, така че получавам резултат NULL за тази колона.
Пример 4 – Използване на sys.database_files
Както споменахме, FILE_NAME()
функцията ви спестява от необходимостта да заявявате sys.database_files
или sys.master_files
изгледи. Ако не разполагахме с FILE_NAME()
функция, вероятно ще трябва да направим нещо подобно:
SELECT name FROM sys.database_files WHERE file_id = 2;
Резултат:
+-----------+ | name | |-----------| | Music_log | +-----------+
Пример 5 – Използване на sys.master_files
Ако използвахме sys.master_files
, ще трябва да добавим някакъв код, за да посочим коя база данни:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Резултат:
+-----------+ | name | |-----------| | Music_log | +-----------+
С този изглед, ако не посочите идентификатора на базата данни, ще получите резултати от всички бази данни. Затова посочвам коя база данни в WHERE
клауза. В този случай използвам DB_ID()
функция, за да получите името на текущата база данни.