I SQL Server kan du bruge FILE_IDEX()
funktion til at returnere ID'et for en given databasefil.
For at gøre dette skal du videregive det logiske filnavn på databasefilen til funktionen. Dette er det navn, der svarer til name
kolonne i sys.master_files
katalogvisning eller sys.database_files
katalogvisning. Disse visninger indeholder også fil-id'et, men FILE_NAME()
sparer dig for at skulle forespørge på disse visninger.
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Eksempel 2 – Flere filer
Her er endnu et eksempel, denne gang returnerer 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 | +-------------+----------+--------------+
Eksempel 3 – Forskellig database
I dette eksempel skifter jeg til en anden database og kører derefter forespørgslen 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 | +---------+-------------+------------------+
Filnavnene er forskellige for denne database. Hvad angår den tredje kolonne, er der ingen fil med det navn, så vi får et NULL-resultat.
Eksempel 4 – Brug af sys.database_files
Som nævnt er FILE_IDEX()
funktionen sparer dig for at skulle forespørge på sys.database_files
eller sys.master_files
visninger. Hvis vi ikke havde FILE_IDEX()
funktion, bliver vi nødt til at gøre noget som dette:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Resultat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Eksempel 5 – Brug af sys.master_files
Her er en lignende forespørgsel til sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Resultat:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Denne visning er en systemdækkende visning, og den kan returnere data fra alle databaser. Derfor tilføjer jeg den aktuelle database (ved at bruge DB_ID()
) ind i forespørgslens WHERE
klausul.