In SQL Server können Sie den FILE_NAME()
verwenden Funktion, um den logischen Dateinamen einer gegebenen Datenbankdatei zurückzugeben.
Übergeben Sie dazu die Datei-ID an die Funktion. Dies ist die ID, die der file_id
entspricht Spalte in sys.master_files
Katalogansicht oder die sys.database_files
Katalogansicht. Diese Ansichten enthalten auch den logischen Dateinamen, aber den FILE_NAME()
Funktion erspart Ihnen das Abfragen dieser Ansichten.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein kurzes Beispiel zur Veranschaulichung.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Ergebnis:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Beispiel 2 – Mehr Dateien
Hier ist ein weiteres Beispiel, diesmal mit der Rückgabe von drei Dateien.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Ergebnis:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Beispiel 3 – Andere Datenbank
In diesem Beispiel wechsle ich zu einer anderen Datenbank und führe dann die Abfrage erneut aus.
USE Music; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Ergebnis:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
In diesem Fall gibt es keine Datei mit der ID 3, also erhalte ich ein NULL-Ergebnis für diese Spalte.
Beispiel 4 – Verwendung von sys.database_files
Wie bereits erwähnt, der FILE_NAME()
Funktion erspart Ihnen die Abfrage der sys.database_files
oder sys.master_files
Ansichten. Wenn wir FILE_NAME()
nicht hätten Funktion, müssten wir wahrscheinlich so etwas tun:
SELECT name FROM sys.database_files WHERE file_id = 2;
Ergebnis:
+-----------+ | name | |-----------| | Music_log | +-----------+
Beispiel 5 – Verwendung von sys.master_files
Wenn wir sys.master_files
verwendet haben , müssten wir etwas Code hinzufügen, um anzugeben, welche Datenbank:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Ergebnis:
+-----------+ | name | |-----------| | Music_log | +-----------+
Wenn Sie in dieser Ansicht die Datenbank-ID nicht angeben, erhalten Sie Ergebnisse aus allen Datenbanken. Daher gebe ich im WHERE
an welche Datenbank Klausel. In diesem Fall verwende ich die DB_ID()
Funktion, um den Namen der aktuellen Datenbank zu erhalten.