I SQL Server kan du bruge FILE_NAME()
funktion til at returnere det logiske filnavn for en given databasefil.
For at gøre dette skal du videregive fil-id'et til funktionen. Dette er det ID, der svarer til file_id
kolonne i sys.master_files
katalogvisning eller sys.database_files
katalogvisning. Disse visninger indeholder også det logiske filnavn, men FILE_NAME()
funktionen sparer dig for at skulle forespørge på disse visninger.
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Resultat:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Eksempel 2 – Flere filer
Her er endnu et eksempel, denne gang returnerer 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 | +-------------+----------+--------------+
Eksempel 3 – Forskellig database
I dette eksempel skifter jeg til en anden database og kører derefter forespørgslen 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 dette tilfælde er der ingen fil med et ID på 3, så jeg får et NULL-resultat for den kolonne.
Eksempel 4 – Brug af sys.database_files
Som nævnt er FILE_NAME()
funktionen sparer dig for at skulle forespørge på sys.database_files
eller sys.master_files
visninger. Hvis vi ikke havde FILE_NAME()
funktion, bliver vi nok nødt til at gøre noget som dette:
SELECT name FROM sys.database_files WHERE file_id = 2;
Resultat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Eksempel 5 – Brug af sys.master_files
Hvis vi brugte sys.master_files
, bliver vi nødt til at tilføje noget kode for at specificere hvilken database:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Resultat:
+-----------+ | name | |-----------| | Music_log | +-----------+
Med denne visning, hvis du ikke angiver database-id'et, får du resultater fra alle databaser. Derfor angiver jeg hvilken database i WHERE
klausul. I dette tilfælde bruger jeg DB_ID()
funktion for at få navnet på den aktuelle database.