Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use FILE_NAME() para retornar o nome do arquivo lógico para um determinado ID de arquivo no SQL Server


No SQL Server, você pode usar o FILE_NAME() função para retornar o nome do arquivo lógico de um determinado arquivo de banco de dados.

Para fazer isso, passe o ID do arquivo para a função. Este é o ID que corresponde ao file_id coluna em sys.master_files exibição de catálogo ou os sys.database_files visualização do catálogo. Essas visualizações também contêm o nome do arquivo lógico, mas o FILE_NAME() A função evita que você precise consultar essas visualizações.


Exemplo 1 – Uso básico


Aqui está um exemplo rápido para demonstrar.
USE WideWorldImportersDW;
SELECT FILE_NAME(1) AS Result;

Resultado:
+-------------+
| Result      |
|-------------|
| WWI_Primary |
+-------------+

Exemplo 2 – Mais arquivos


Aqui está outro exemplo, desta vez retornando três arquivos.
USE WideWorldImportersDW;
SELECT 
  FILE_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

Resultado:
+-------------+----------+--------------+
| File 1      | File 2   | File 3       |
|-------------+----------+--------------|
| WWI_Primary | WWI_Log  | WWI_UserData |
+-------------+----------+--------------+

Exemplo 3 – Banco de dados diferente


Neste exemplo, mudo para um banco de dados diferente e executo a consulta novamente.
USE Music;
SELECT 
  FILE_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

Resultado:
+----------+-----------+----------+
| File 1   | File 2    | File 3   |
|----------+-----------+----------|
| Music    | Music_log | NULL     |
+----------+-----------+----------+

Nesse caso, não há arquivo com ID 3, então recebo um resultado NULL para essa coluna.

Exemplo 4 – Usando sys.database_files


Como mencionado, o FILE_NAME() A função evita que você precise consultar os sys.database_files ou sys.master_files Visualizações. Se não tivéssemos o FILE_NAME() função, provavelmente teríamos que fazer algo assim:
SELECT name
FROM sys.database_files
WHERE file_id = 2;

Resultado:
+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Exemplo 5 – Usando sys.master_files


Se usamos sys.master_files , precisaríamos adicionar algum código para especificar qual banco de dados:
SELECT name 
FROM sys.master_files
WHERE file_id = 2
AND database_id = DB_ID();

Resultado:
+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Com essa visualização, se você não especificar o ID do banco de dados, obterá resultados de todos os bancos de dados. Portanto, eu especifico qual banco de dados no WHERE cláusula. Neste caso eu uso o DB_ID() função para obter o nome do banco de dados atual.