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.