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

Use FILE_IDEX() para retornar a ID de um arquivo de banco de dados no SQL Server


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.