I SQL Server kan du använda FILE_NAME()
funktion för att returnera det logiska filnamnet för en given databasfil.
För att göra detta, skicka fil-ID till funktionen. Detta är ID:t som motsvarar file_id
kolumnen i sys.master_files
katalogvy eller sys.database_files
katalogvy. Dessa vyer innehåller också det logiska filnamnet, men FILE_NAME()
funktionen sparar dig från att behöva fråga efter dessa vyer.
Exempel 1 – Grundläggande användning
Här är ett snabbt exempel att visa.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Resultat:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Exempel 2 – Fler filer
Här är ett annat exempel, denna gång returnerar tre filer.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Resultat:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Exempel 3 – Annan databas
I det här exemplet byter jag till en annan databas och kör sedan frågan igen.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Resultat:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
I det här fallet finns det ingen fil med ID 3, så jag får ett NULL-resultat för den kolumnen.
Exempel 4 – Använda sys.database_files
Som nämnts, FILE_NAME()
funktionen sparar dig från att behöva fråga sys.database_files
eller sys.master_files
vyer. Om vi inte hade FILE_NAME()
funktion, måste vi förmodligen göra något så här:
SELECT name FROM sys.database_files WHERE file_id = 2;
Resultat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Exempel 5 – Använda sys.master_files
Om vi använde sys.master_files
, måste vi lägga till lite kod för att ange vilken databas:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Resultat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Med den här vyn, om du inte anger databas-ID, får du resultat från alla databaser. Därför anger jag vilken databas i WHERE
klausul. I det här fallet använder jag DB_ID()
funktion för att få namnet på den aktuella databasen.