sql >> Databasteknik >  >> RDS >> Sqlserver

Använd FILE_NAME() för att returnera det logiska filnamnet för ett givet fil-ID i SQL Server

I SQL Server kan du använda FILE_NAME() funktion för att returnera det logiska filnamnet för en given databasfil.

För att göra detta, skicka fil-ID till funktionen. Detta är ID:t som motsvarar file_id kolumnen i sys.master_files katalogvy eller sys.database_files katalogvy. Dessa vyer innehåller också det logiska filnamnet, men FILE_NAME() funktionen sparar dig från att behöva fråga efter dessa vyer.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

USE WideWorldImportersDW;
SELECT FILE_NAME(1) AS Result;

Resultat:

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

Exempel 2 – Fler filer

Här är ett annat exempel, denna gång returnerar 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 |
+-------------+----------+--------------+

Exempel 3 – Annan databas

I det här exemplet byter jag till en annan databas och kör sedan frågan 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 det här fallet finns det ingen fil med ID 3, så jag får ett NULL-resultat för den kolumnen.

Exempel 4 – Använda sys.database_files

Som nämnts, FILE_NAME() funktionen sparar dig från att behöva fråga sys.database_files eller sys.master_files vyer. Om vi ​​inte hade FILE_NAME() funktion, måste vi förmodligen göra något så här:

SELECT name
FROM sys.database_files
WHERE file_id = 2;

Resultat:

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

Exempel 5 – Använda sys.master_files

Om vi ​​använde sys.master_files , måste vi lägga till lite kod för att ange vilken databas:

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

Resultat:

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

Med den här vyn, om du inte anger databas-ID, får du resultat från alla databaser. Därför anger jag vilken databas i WHERE klausul. I det här fallet använder jag DB_ID() funktion för att få namnet på den aktuella databasen.


  1. Utöka EM Grid Control till nya noder

  2. Hur kan jag ändra min standarddatabas i SQL Server utan att använda MS SQL Server Management Studio?

  3. Hur använder man RETURNING med ON CONFLICT i PostgreSQL?

  4. Jag får ett Ett försök gjordes att ladda ett program med ett felaktigt formatfel på ett SQL Server-replikeringsprojekt