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