In SQL Server kunt u de FILE_NAME()
functie om de logische bestandsnaam van een gegeven databasebestand te retourneren.
Om dit te doen, geeft u de bestands-ID door aan de functie. Dit is de ID die overeenkomt met de file_id
kolom in de sys.master_files
catalogusweergave of de sys.database_files
catalogus bekijken. Die views bevatten ook de logische bestandsnaam, maar de FILE_NAME()
functie voorkomt dat u die weergaven hoeft op te vragen.
Voorbeeld 1 – Basisgebruik
Hier is een snel voorbeeld om te demonstreren.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Resultaat:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Voorbeeld 2 – Meer bestanden
Hier is nog een voorbeeld, dit keer met drie bestanden.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Resultaat:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Voorbeeld 3 – Andere database
In dit voorbeeld schakel ik over naar een andere database en voer ik de query opnieuw uit.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Resultaat:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
In dit geval is er geen bestand met een ID van 3, dus ik krijg een NULL-resultaat voor die kolom.
Voorbeeld 4 – sys.database_files gebruiken
Zoals gezegd, de FILE_NAME()
functie bespaart u het opvragen van de sys.database_files
of sys.master_files
keer bekeken. Als we de FILE_NAME()
. niet hadden functie, zouden we waarschijnlijk zoiets als dit moeten doen:
SELECT name FROM sys.database_files WHERE file_id = 2;
Resultaat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Voorbeeld 5 – sys.master_files gebruiken
Als we sys.master_files
. gebruikten , moeten we wat code toevoegen om aan te geven welke database:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Resultaat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Als u in deze weergave de database-ID niet opgeeft, krijgt u resultaten van alle databases. Daarom specificeer ik welke database in de WHERE
clausule. In dit geval gebruik ik de DB_ID()
functie om de naam van de huidige database te krijgen.