In SQL Server kunt u de FILE_IDEX()
functie om de ID van een gegeven databasebestand te retourneren.
Geef hiervoor de logische bestandsnaam van het databasebestand door aan de functie. Dit is de naam die overeenkomt met de name
kolom in de sys.master_files
catalogusweergave of de sys.database_files
catalogus bekijken. Die weergaven bevatten ook de bestands-ID, maar FILE_NAME()
voorkomt dat u die weergaven hoeft op te vragen.
Voorbeeld 1 – Basisgebruik
Hier is een snel voorbeeld om te demonstreren.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Resultaat:
+----------+ | Result | |----------| | 1 | +----------+
Voorbeeld 2 – Meer bestanden
Hier is nog een voorbeeld, dit keer met drie bestanden.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
Resultaat:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Voorbeeld 3 – Andere database
In dit voorbeeld schakel ik over naar een andere database en voer ik de query opnieuw uit.
USE Music; SELECT FILE_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Resultaat:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
De bestandsnamen zijn verschillend voor deze database. Wat betreft de derde kolom is er ook geen bestand met die naam, dus we krijgen een NULL-resultaat.
Voorbeeld 4 – sys.database_files gebruiken
Zoals gezegd, de FILE_IDEX()
functie bespaart u het opvragen van de sys.database_files
of sys.master_files
keer bekeken. Als we de FILE_IDEX()
. niet hadden functie, zouden we zoiets als dit moeten doen:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Resultaat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Voorbeeld 5 – sys.master_files gebruiken
Hier is een vergelijkbare zoekopdracht voor sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Resultaat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Deze weergave is een systeembrede weergave en kan gegevens uit alle databases retourneren. Daarom voeg ik de huidige database toe (met behulp van DB_ID()
) in de WHERE
. van de zoekopdracht clausule.