Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie FILE_IDEX(), um die ID einer Datenbankdatei in SQL Server zurückzugeben

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.