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.