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.