In SQL Server puoi utilizzare FILE_NAME()
funzione per restituire il nome del file logico di un determinato file di database.
Per fare ciò, passa l'ID del file alla funzione. Questo è l'ID che corrisponde a file_id
colonna nel sys.master_files
vista catalogo o sys.database_files
vista catalogo. Tali viste contengono anche il nome del file logico, ma il FILE_NAME()
la funzione ti evita di dover interrogare quelle viste.
Esempio 1 – Utilizzo di base
Ecco un rapido esempio da dimostrare.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS Result;
Risultato:
+-------------+ | Result | |-------------| | WWI_Primary | +-------------+
Esempio 2:più file
Ecco un altro esempio, questa volta restituendo tre file.
USE WideWorldImportersDW; SELECT FILE_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
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_NAME(1) AS [File 1], FILE_NAME(2) AS [File 2], FILE_NAME(3) AS [File 3];
Risultato:
+----------+-----------+----------+ | File 1 | File 2 | File 3 | |----------+-----------+----------| | Music | Music_log | NULL | +----------+-----------+----------+
In questo caso, non esiste un file con ID 3, quindi ottengo un risultato NULL per quella colonna.
Esempio 4 – Utilizzo di sys.database_files
Come accennato, il FILE_NAME()
la funzione ti evita di dover interrogare i sys.database_files
o sys.master_files
visualizzazioni. Se non avessimo il FILE_NAME()
funzione, probabilmente dovremmo fare qualcosa del genere:
SELECT name FROM sys.database_files WHERE file_id = 2;
Risultato:
+-----------+ | name | |-----------| | Music_log | +-----------+
Esempio 5 – Utilizzo di sys.master_files
Se usiamo sys.master_files
, dovremmo aggiungere del codice per specificare quale database:
SELECT name FROM sys.master_files WHERE file_id = 2 AND database_id = DB_ID();
Risultato:
+-----------+ | name | |-----------| | Music_log | +-----------+
Con questa visualizzazione, se non specifichi l'ID del database, otterrai risultati da tutti i database. Pertanto specifico quale database nel WHERE
clausola. In questo caso utilizzo il DB_ID()
funzione per ottenere il nome del database corrente.