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

Verwenden Sie FILE_NAME(), um den logischen Dateinamen für eine bestimmte Datei-ID in SQL Server zurückzugeben

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.