sql >> Databasteknik >  >> RDS >> Sqlserver

Använd FILE_IDEX() för att returnera ID:t för en databasfil i SQL Server

I SQL Server kan du använda FILE_IDEX() funktion för att returnera ID för en given databasfil.

För att göra detta, skicka det logiska filnamnet för databasfilen till funktionen. Detta är namnet som motsvarar name kolumnen i sys.master_files katalogvy eller sys.database_files katalogvy. Dessa vyer innehåller också fil-ID, men FILE_NAME() sparar dig från att behöva fråga efter dessa vyer.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

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

Resultat:

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

Exempel 2 – Fler filer

Här är ett annat exempel, denna gång returnerar tre filer.

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

Resultat:

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

Exempel 3 – Annan databas

I det här exemplet byter jag till en annan databas och kör sedan frågan igen.

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

Resultat:

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

Filnamnen är olika för denna databas. Dessutom, när det gäller den tredje kolumnen, finns det ingen fil med det namnet, så vi får ett NULL-resultat.

Exempel 4 – Använda sys.database_files

Som nämnts, FILE_IDEX() funktionen sparar dig från att behöva fråga sys.database_files eller sys.master_files vyer. Om vi ​​inte hade FILE_IDEX() funktion måste vi göra något så här:

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

Resultat:

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

Exempel 5 – Använda sys.master_files

Här är en liknande fråga för sys.master_files :

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

Resultat:

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

Denna vy är en systemomfattande vy och den kan returnera data från alla databaser. Därför lägger jag till den aktuella databasen (genom att använda DB_ID() ) i frågans WHERE klausul.


  1. Hur DATE_SUB() fungerar i MariaDB

  2. Lösning för ORA-00997:olaglig användning av LONG datatyp

  3. Hur man kör lagrad procedur i MySQL Workbench

  4. Hur undkommer man strängar i SQL Server med PHP?