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

Utilizzare FILE_NAME() per restituire il nome file logico per un determinato ID file in SQL Server

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.