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.