sql >> Database teknologi >  >> RDS >> Sqlserver

Brug FILE_IDEX() til at returnere id'et for en databasefil i SQL Server

I SQL Server kan du bruge FILE_IDEX() funktion til at returnere ID'et for en given databasefil.

For at gøre dette skal du videregive det logiske filnavn på databasefilen til funktionen. Dette er det navn, der svarer til name kolonne i sys.master_files katalogvisning eller sys.database_files katalogvisning. Disse visninger indeholder også fil-id'et, men FILE_NAME() sparer dig for at skulle forespørge på disse visninger.

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

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

Resultat:

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

Eksempel 2 – Flere filer

Her er endnu et eksempel, denne gang returnerer 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 |
+-------------+----------+--------------+

Eksempel 3 – Forskellig database

I dette eksempel skifter jeg til en anden database og kører derefter forespørgslen 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             |
+---------+-------------+------------------+

Filnavnene er forskellige for denne database. Hvad angår den tredje kolonne, er der ingen fil med det navn, så vi får et NULL-resultat.

Eksempel 4 – Brug af sys.database_files

Som nævnt er FILE_IDEX() funktionen sparer dig for at skulle forespørge på sys.database_files eller sys.master_files visninger. Hvis vi ikke havde FILE_IDEX() funktion, bliver vi nødt til at gøre noget som dette:

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

Resultat:

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

Eksempel 5 – Brug af sys.master_files

Her er en lignende forespørgsel til sys.master_files :

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

Resultat:

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

Denne visning er en systemdækkende visning, og den kan returnere data fra alle databaser. Derfor tilføjer jeg den aktuelle database (ved at bruge DB_ID() ) ind i forespørgslens WHERE klausul.


  1. 'IF' i 'SELECT'-sætning - vælg outputværdi baseret på kolonneværdier

  2. 3 måder at "løsne" en streng i MySQL

  3. Kan du tilføje en hvis-erklæring i ORDER BY?

  4. Brug OBJECTPROPERTY() til at finde ud af, om en tabel er en systemtabel i SQL Server