In SQL Server puoi utilizzare FILE_IDEX()
funzione per restituire l'ID di un determinato file di database.
A tale scopo, passare alla funzione il nome del file logico del file di database. Questo è il nome che corrisponde al name
colonna nel sys.master_files
vista catalogo o sys.database_files
vista catalogo. Tali viste contengono anche l'ID del file, ma FILE_NAME()
ti evita di dover interrogare quelle viste.
Esempio 1 – Utilizzo di base
Ecco un rapido esempio da dimostrare.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS Result;
Risultato:
+----------+ | Result | |----------| | 1 | +----------+
Esempio 2:più file
Ecco un altro esempio, questa volta restituendo tre file.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
Risultato:
+-------------+----------+--------------+ | File 1 | File 2 | File 3 | |-------------+----------+--------------| | WWI_Primary | WWI_Log | WWI_UserData | +-------------+----------+--------------+
Esempio 3 – Database diverso
In questo esempio passo a un database diverso, quindi rieseguo la query.
USE Music; SELECT FILE_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Risultato:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
I nomi dei file sono diversi per questo database. Inoltre, per quanto riguarda la terza colonna, non esiste alcun file con quel nome, quindi otteniamo un risultato NULL.
Esempio 4 – Utilizzo di sys.database_files
Come accennato, il FILE_IDEX()
la funzione ti evita di dover interrogare i sys.database_files
o sys.master_files
visualizzazioni. Se non avessimo il FILE_IDEX()
funzione, dovremmo fare qualcosa del genere:
USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Risultato:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Esempio 5 – Utilizzo di sys.master_files
Ecco una query simile per sys.master_files
:
SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Risultato:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Questa vista è a livello di sistema e può restituire dati da tutti i database. Pertanto, aggiungo il database corrente (usando DB_ID()
) nel WHERE
della query clausola.