Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използвайте FILE_IDEX(), за да върнете идентификатора на файл с база данни в SQL Server

В SQL Server можете да използвате FILE_IDEX() функция за връщане на идентификатора на даден файл на базата данни.

За да направите това, предайте логическото име на файла на базата данни на функцията. Това е името, което съответства на name колона в sys.master_files изглед на каталог или sys.database_files изглед на каталог. Тези изгледи също съдържат идентификатора на файла, но FILE_NAME() ви спестява от необходимостта да заявявате тези изгледи.

Пример 1 – Основна употреба

Ето един бърз пример за демонстрация.

USE WideWorldImportersDW;
SELECT FILE_IDEX('WWI_Primary') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Пример 2 – Още файлове

Ето още един пример, този път връща три файла.

USE WideWorldImportersDW;
SELECT 
  FILE_IDEX('WWI_Primary') AS WWI_Primary,
  FILE_IDEX('WWI_Log') AS WWI_Log,
  FILE_IDEX('WWI_UserData') AS WWI_UserData;

Резултат:

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

Пример 3 – Различна база данни

В този пример преминавам към друга база данни, след което стартирам заявката отново.

USE Music;
SELECT 
  FILE_IDEX('Music') AS Music,
  FILE_IDEX('Music_Log') AS Music_Log,
  FILE_IDEX('Music_UserData') AS Music_UserData;

Резултат:

+---------+-------------+------------------+
| Music   | Music_Log   | Music_UserData   |
|---------+-------------+------------------|
| 1       | 2           | NULL             |
+---------+-------------+------------------+

Имената на файловете са различни за тази база данни. Освен това по отношение на третата колона няма файл с това име, така че получаваме резултат NULL.

Пример 4 – Използване на sys.database_files

Както споменахме, FILE_IDEX() функцията ви спестява от необходимостта да заявявате sys.database_files или sys.master_files изгледи. Ако не разполагахме с FILE_IDEX() функция, ще трябва да направим нещо подобно:

USE WideWorldImportersDW;
SELECT file_id
FROM sys.database_files
WHERE name = 'WWI_Primary';

Резултат:

+-----------+
| file_id   |
|-----------|
| 1         |
+-----------+

Пример 5 – Използване на sys.master_files

Ето подобна заявка за sys.master_files :

SELECT file_id 
FROM sys.master_files
WHERE name = 'WWI_Primary'
AND database_id = DB_ID();

Резултат:

+-----------+
| file_id   |
|-----------|
| 1         |
+-----------+

Този изглед е изглед за цялата система и може да връща данни от всички бази данни. Затова добавям текущата база данни (чрез използване на DB_ID() ) в WHERE на заявката клауза.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам SqlCommand за СЪЗДАВАНЕ НА БАЗА ДАННИ с параметризирано db име?

  2. Защо и кога LEFT JOIN с условие в клауза WHERE не е еквивалентно на същото LEFT JOIN в ON?

  3. Как да предотвратя повторното задействане на база данни?

  4. Как да намерите елемент от списък на определена позиция в SQL Server

  5. Заявка за възстановяване на индекс на SQL Server