В 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
на заявката клауза.