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.