W SQL Server możesz użyć FILE_NAME()
funkcja zwracająca logiczną nazwę pliku z podanego pliku bazy danych.
Aby to zrobić, przekaż identyfikator pliku do funkcji. To jest identyfikator odpowiadający file_id
kolumna w sys.master_files
widok katalogu lub sys.database_files
widok katalogu. Te widoki również zawierają logiczną nazwę pliku, ale FILE_NAME()
funkcja pozwala uniknąć konieczności wysyłania zapytań do tych widoków.
Przykład 1 – Podstawowe użycie
Oto krótki przykład do zademonstrowania.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Wynik:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Przykład 2 – Więcej plików
Oto kolejny przykład, tym razem zwracający trzy pliki.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Wynik:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Przykład 3 – Inna baza danych
W tym przykładzie przełączam się na inną bazę danych, a następnie ponownie uruchamiam zapytanie.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Wynik:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
W tym przypadku nie ma pliku o identyfikatorze 3, więc otrzymuję wynik NULL dla tej kolumny.
Przykład 4 – Korzystanie z sys.database_files
Jak wspomniano, FILE_NAME()
funkcja pozwala uniknąć odpytywania sys.database_files
lub sys.master_files
wyświetlenia. Gdybyśmy nie mieli FILE_NAME()
funkcji, prawdopodobnie musielibyśmy zrobić coś takiego:
SELECT name FROM sys.database_files WHERE file_id = 2;
Wynik:
+-----------+ | name | |-----------| | Music_log | +-----------+
Przykład 5 – Korzystanie z plików sys.master_files
Jeśli użyliśmy sys.master_files
, musielibyśmy dodać trochę kodu, aby określić, która baza danych:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Wynik:
+-----------+ | name | |-----------| | Music_log | +-----------+
W tym widoku, jeśli nie określisz identyfikatora bazy danych, otrzymasz wyniki ze wszystkich baz danych. Dlatego określam, która baza danych w WHERE
klauzula. W tym przypadku używam DB_ID()
funkcja, aby uzyskać nazwę bieżącej bazy danych.