sql >> Database >  >> RDS >> Sqlserver

Gebruik FILE_IDEX() om de ID van een databasebestand in SQL Server te retourneren

In SQL Server kunt u de FILE_IDEX() functie om de ID van een gegeven databasebestand te retourneren.

Geef hiervoor de logische bestandsnaam van het databasebestand door aan de functie. Dit is de naam die overeenkomt met de name kolom in de sys.master_files catalogusweergave of de sys.database_files catalogus bekijken. Die weergaven bevatten ook de bestands-ID, maar FILE_NAME() voorkomt dat u die weergaven hoeft op te vragen.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

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

Resultaat:

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

Voorbeeld 2 – Meer bestanden

Hier is nog een voorbeeld, dit keer met drie bestanden.

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

Resultaat:

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

Voorbeeld 3 – Andere database

In dit voorbeeld schakel ik over naar een andere database en voer ik de query opnieuw uit.

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

Resultaat:

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

De bestandsnamen zijn verschillend voor deze database. Wat betreft de derde kolom is er ook geen bestand met die naam, dus we krijgen een NULL-resultaat.

Voorbeeld 4 – sys.database_files gebruiken

Zoals gezegd, de FILE_IDEX() functie bespaart u het opvragen van de sys.database_files of sys.master_files keer bekeken. Als we de FILE_IDEX() . niet hadden functie, zouden we zoiets als dit moeten doen:

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

Resultaat:

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

Voorbeeld 5 – sys.master_files gebruiken

Hier is een vergelijkbare zoekopdracht voor sys.master_files :

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

Resultaat:

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

Deze weergave is een systeembrede weergave en kan gegevens uit alle databases retourneren. Daarom voeg ik de huidige database toe (met behulp van DB_ID() ) in de WHERE . van de zoekopdracht clausule.


  1. Uitzondering in thread main java.sql.SQLException:Toegang geweigerd voor gebruiker ''@'localhost' (met wachtwoord:NEE)

  2. TSQL:Hoe kan ik lokale tijd naar UTC converteren? (SQL-server 2008)

  3. Prestatievoordelen vinden met partitionering

  4. PostgreSQL-datumtypen en -functies begrijpen (door voorbeelden)