sql >> Database teknologi >  >> RDS >> Sqlserver

Brug FILE_NAME() til at returnere det logiske filnavn for et givet fil-id i SQL Server

I SQL Server kan du bruge FILE_NAME() funktion til at returnere det logiske filnavn for en given databasefil.

For at gøre dette skal du videregive fil-id'et til funktionen. Dette er det ID, der svarer til file_id kolonne i sys.master_files katalogvisning eller sys.database_files katalogvisning. Disse visninger indeholder også det logiske filnavn, men FILE_NAME() funktionen sparer dig for at skulle forespørge på disse visninger.

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

USE WideWorldImportersDW;
SELECT FILE_NAME(1) AS Result;

Resultat:

+-------------+
| Result      |
|-------------|
| WWI_Primary |
+-------------+

Eksempel 2 – Flere filer

Her er endnu et eksempel, denne gang returnerer tre filer.

USE WideWorldImportersDW;
SELECT 
  FILE_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

Resultat:

+-------------+----------+--------------+
| File 1      | File 2   | File 3       |
|-------------+----------+--------------|
| WWI_Primary | WWI_Log  | WWI_UserData |
+-------------+----------+--------------+

Eksempel 3 – Forskellig database

I dette eksempel skifter jeg til en anden database og kører derefter forespørgslen igen.

USE Music;
SELECT 
  FILE_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

Resultat:

+----------+-----------+----------+
| File 1   | File 2    | File 3   |
|----------+-----------+----------|
| Music    | Music_log | NULL     |
+----------+-----------+----------+

I dette tilfælde er der ingen fil med et ID på 3, så jeg får et NULL-resultat for den kolonne.

Eksempel 4 – Brug af sys.database_files

Som nævnt er FILE_NAME() funktionen sparer dig for at skulle forespørge på sys.database_files eller sys.master_files visninger. Hvis vi ikke havde FILE_NAME() funktion, bliver vi nok nødt til at gøre noget som dette:

SELECT name
FROM sys.database_files
WHERE file_id = 2;

Resultat:

+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Eksempel 5 – Brug af sys.master_files

Hvis vi brugte sys.master_files , bliver vi nødt til at tilføje noget kode for at specificere hvilken database:

SELECT name 
FROM sys.master_files
WHERE file_id = 2
AND database_id = DB_ID();

Resultat:

+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Med denne visning, hvis du ikke angiver database-id'et, får du resultater fra alle databaser. Derfor angiver jeg hvilken database i WHERE klausul. I dette tilfælde bruger jeg DB_ID() funktion for at få navnet på den aktuelle database.


  1. docker postgres med indledende data er ikke persisted over commits

  2. Sådan repræsenterer du Oracle Interval i Java

  3. Sådan slippes en fremmednøgle i SQLite

  4. Sådan udfører du grupperet rangering i MySQL