V SQL Server můžete použít FILE_IDEX()
funkce pro vrácení ID daného databázového souboru.
Chcete-li to provést, předejte funkci název logického souboru databázového souboru. Toto je jméno, které odpovídá name
ve sloupci sys.master_files
zobrazení katalogu nebo sys.database_files
zobrazení katalogu. Tyto pohledy také obsahují ID souboru, ale FILE_NAME()
ušetří vám nutnost dotazovat se na tato zobrazení.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Výsledek:
+----------+ | Result | |----------| | 1 | +----------+
Příklad 2 – Více souborů
Zde je další příklad, tentokrát vrací tři soubory.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
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_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Výsledek:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Názvy souborů se pro tuto databázi liší. Pokud jde o třetí sloupec, neexistuje žádný soubor s tímto názvem, takže dostaneme výsledek NULL.
Příklad 4 – Použití sys.database_files
Jak již bylo zmíněno, FILE_IDEX()
Tato funkce vás ušetří od dotazování na sys.database_files
nebo sys.master_files
pohledy. Pokud bychom neměli FILE_IDEX()
funkce, museli bychom udělat něco takového:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Výsledek:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Příklad 5 – Použití sys.master_files
Zde je podobný dotaz pro sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Výsledek:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Tento pohled je celosystémový a může vracet data ze všech databází. Proto přidám aktuální databázi (pomocí DB_ID()
) do WHERE
dotazu doložka.