In SQL Server können Sie FILE_IDEX()
verwenden Funktion, um die ID einer bestimmten Datenbankdatei zurückzugeben.
Übergeben Sie dazu der Funktion den logischen Dateinamen der Datenbankdatei. Dies ist der Name, der dem name
entspricht Spalte in sys.master_files
Katalogansicht oder die sys.database_files
Katalogansicht. Diese Ansichten enthalten auch die Datei-ID, aber FILE_NAME()
erspart Ihnen das Abfragen dieser Ansichten.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein kurzes Beispiel zur Veranschaulichung.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Ergebnis:
+----------+ | Result | |----------| | 1 | +----------+
Beispiel 2 – Mehr Dateien
Hier ist ein weiteres Beispiel, diesmal mit der Rückgabe von drei Dateien.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
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_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Ergebnis:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Die Dateinamen sind für diese Datenbank unterschiedlich. Auch in Bezug auf die dritte Spalte gibt es keine Datei mit diesem Namen, also erhalten wir ein NULL-Ergebnis.
Beispiel 4 – Verwendung von sys.database_files
Wie bereits erwähnt, die FILE_IDEX()
Funktion erspart Ihnen die Abfrage der sys.database_files
oder sys.master_files
Ansichten. Wenn wir die FILE_IDEX()
nicht hätten Funktion, müssten wir etwa so vorgehen:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Ergebnis:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Beispiel 5 – Verwendung von sys.master_files
Hier ist eine ähnliche Abfrage für sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Ergebnis:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Diese Ansicht ist eine systemweite Ansicht und kann Daten aus allen Datenbanken zurückgeben. Daher füge ich die aktuelle Datenbank hinzu (mithilfe von DB_ID()
) in das WHERE
der Abfrage Klausel.