Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare FILE_IDEX() per restituire l'ID di un file di database in SQL Server

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.