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.