Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj FILE_IDEX(), aby zwrócić identyfikator pliku bazy danych w SQL Server

W SQL Server możesz użyć FILE_IDEX() funkcja zwracająca identyfikator podanego pliku bazy danych.

Aby to zrobić, przekaż do funkcji nazwę logiczną pliku bazy danych. To jest nazwa, która odpowiada name kolumna w sys.master_files widok katalogu lub sys.database_files widok katalogu. Te widoki również zawierają identyfikator pliku, ale FILE_NAME() nie musisz pytać o te widoki.

Przykład 1 – Podstawowe użycie

Oto krótki przykład do zademonstrowania.

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

Wynik:

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

Przykład 2 – Więcej plików

Oto kolejny przykład, tym razem zwracający trzy pliki.

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

Wynik:

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

Przykład 3 – Inna baza danych

W tym przykładzie przełączam się na inną bazę danych, a następnie ponownie uruchamiam zapytanie.

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

Wynik:

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

Nazwy plików są inne dla tej bazy danych. Ponadto, jeśli chodzi o trzecią kolumnę, nie ma pliku o tej nazwie, więc otrzymujemy wynik NULL.

Przykład 4 – Korzystanie z sys.database_files

Jak wspomniano, FILE_IDEX() funkcja oszczędza Ci konieczności odpytywania sys.database_files lub sys.master_files wyświetlenia. Gdybyśmy nie mieli FILE_IDEX() funkcji, musielibyśmy zrobić coś takiego:

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

Wynik:

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

Przykład 5 – Korzystanie z plików sys.master_files

Oto podobne zapytanie dla sys.master_files :

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

Wynik:

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

Ten widok jest widokiem ogólnosystemowym i może zwracać dane ze wszystkich baz danych. Dlatego dodaję bieżącą bazę danych (za pomocą DB_ID() ) do WHERE zapytania klauzula.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz wartości wierszy T-SQL

  2. Jak używać operatora BETWEEN w SQL Server

  3. Jak tworzyć widoki zmaterializowane w SQL Server?

  4. Pokaż zaawansowane opcje konfiguracji serwera w SQL Server (T-SQL)

  5. SQL Server 2016:Utwórz użytkownika bazy danych