No SQL Server, você pode usar o
FILE_IDEX()
função para retornar o ID de um determinado arquivo de banco de dados. Para fazer isso, passe o nome do arquivo lógico do arquivo de banco de dados para a função. Este é o nome que corresponde ao
name
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 ID do arquivo, mas FILE_NAME()
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_IDEX('WWI_Primary') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
Exemplo 2 – Mais arquivos
Aqui está outro exemplo, desta vez retornando três arquivos.
USE WideWorldImportersDW; SELECT FILE_IDEX('WWI_Primary') AS WWI_Primary, FILE_IDEX('WWI_Log') AS WWI_Log, FILE_IDEX('WWI_UserData') AS WWI_UserData;
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_IDEX('Music') AS Music, FILE_IDEX('Music_Log') AS Music_Log, FILE_IDEX('Music_UserData') AS Music_UserData;
Resultado:
+---------+-------------+------------------+ | Music | Music_Log | Music_UserData | |---------+-------------+------------------| | 1 | 2 | NULL | +---------+-------------+------------------+
Os nomes dos arquivos são diferentes para este banco de dados. Além disso, em relação à terceira coluna, não há arquivo com esse nome, então obtemos um resultado NULL.
Exemplo 4 – Usando sys.database_files
Como mencionado, o
FILE_IDEX()
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_IDEX()
função, teríamos que fazer algo assim:USE WideWorldImportersDW; SELECT file_id FROM sys.database_files WHERE name = 'WWI_Primary';
Resultado:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Exemplo 5 – Usando sys.master_files
Aqui está uma consulta semelhante para
sys.master_files
:SELECT file_id FROM sys.master_files WHERE name = 'WWI_Primary' AND database_id = DB_ID();
Resultado:
+-----------+ | file_id | |-----------| | 1 | +-----------+
Essa visualização é uma visualização de todo o sistema e pode retornar dados de todos os bancos de dados. Portanto, eu adiciono o banco de dados atual (usando
DB_ID()
) no WHERE
da consulta cláusula.