I SQL Server kan du använda FILE_IDEX() funktion för att returnera ID för en given databasfil.
För att göra detta, skicka det logiska filnamnet för databasfilen till funktionen. Detta är namnet som motsvarar name kolumnen i sys.master_files katalogvy eller sys.database_files katalogvy. Dessa vyer innehåller också fil-ID, men FILE_NAME() 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_IDEX('WWI_Primary') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Exempel 2 – Fler filer
Här är ett annat exempel, denna gång returnerar tre filer.
USE WideWorldImportersDW;
SELECT
FILE_IDEX('WWI_Primary') AS WWI_Primary,
FILE_IDEX('WWI_Log') AS WWI_Log,
FILE_IDEX('WWI_UserData') AS WWI_UserData;
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_IDEX('Music') AS Music,
FILE_IDEX('Music_Log') AS Music_Log,
FILE_IDEX('Music_UserData') AS Music_UserData;
Resultat:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Filnamnen är olika för denna databas. Dessutom, när det gäller den tredje kolumnen, finns det ingen fil med det namnet, så vi får ett NULL-resultat.
Exempel 4 – Använda sys.database_files
Som nämnts, FILE_IDEX() funktionen sparar dig från att behöva fråga sys.database_files eller sys.master_files vyer. Om vi inte hade FILE_IDEX() funktion måste vi göra något så här:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Resultat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Exempel 5 – Använda sys.master_files
Här är en liknande fråga för sys.master_files :
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Resultat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Denna vy är en systemomfattande vy och den kan returnera data från alla databaser. Därför lägger jag till den aktuella databasen (genom att använda DB_ID() ) i frågans WHERE klausul.