sql >> Databáze >  >> RDS >> Sqlserver

Pomocí FILE_NAME() vrátíte název logického souboru pro dané ID souboru na serveru SQL Server

V SQL Server můžete použít FILE_NAME() funkce, která vrátí název logického souboru daného databázového souboru.

Chcete-li to provést, předejte funkci ID souboru. Toto je ID, které odpovídá file_id ve sloupci sys.master_files zobrazení katalogu nebo sys.database_files zobrazení katalogu. Tyto pohledy také obsahují název logického souboru, ale FILE_NAME() Tato funkce vás ušetří od dotazování na tato zobrazení.

Příklad 1 – Základní použití

Zde je rychlý příklad k demonstraci.

USE WideWorldImportersDW;
SELECT FILE_NAME(1) AS Result;

Výsledek:

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

Příklad 2 – Více souborů

Zde je další příklad, tentokrát vrací tři soubory.

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

Výsledek:

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

Příklad 3 – Jiná databáze

V tomto příkladu přepnu do jiné databáze a poté znovu spustím dotaz.

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

Výsledek:

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

V tomto případě neexistuje žádný soubor s ID 3, takže pro tento sloupec dostanu výsledek NULL.

Příklad 4 – Použití sys.database_files

Jak již bylo zmíněno, FILE_NAME() funkce vám ušetří nutnost dotazovat se na sys.database_files nebo sys.master_files pohledy. Pokud bychom neměli FILE_NAME() funkce, pravděpodobně bychom museli udělat něco takového:

SELECT name
FROM sys.database_files
WHERE file_id = 2;

Výsledek:

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

Příklad 5 – Použití sys.master_files

Pokud bychom použili sys.master_files , museli bychom přidat nějaký kód, abychom určili, která databáze:

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

Výsledek:

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

Pokud v tomto zobrazení nezadáte ID databáze, získáte výsledky ze všech databází. Proto specifikuji kterou databázi v WHERE doložka. V tomto případě používám DB_ID() funkce pro získání názvu aktuální databáze.


  1. CHARINDEX() vs PATINDEX() v SQL Server – jaký je rozdíl?

  2. Najděte maximální hodnotu a zobrazte odpovídající hodnotu z jiného pole na serveru SQL

  3. Jak získat včerejší datum v Oracle

  4. Jaký je maximální počet povolených parametrů na typ poskytovatele databáze?