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.