sql >> Database >  >> RDS >> Sqlserver

Gebruik FILE_NAME() om de logische bestandsnaam te retourneren voor een gegeven bestands-ID in SQL Server

In SQL Server kunt u de FILE_NAME() functie om de logische bestandsnaam van een gegeven databasebestand te retourneren.

Om dit te doen, geeft u de bestands-ID door aan de functie. Dit is de ID die overeenkomt met de file_id kolom in de sys.master_files catalogusweergave of de sys.database_files catalogus bekijken. Die views bevatten ook de logische bestandsnaam, maar de FILE_NAME() functie voorkomt dat u die weergaven hoeft op te vragen.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

USE WideWorldImportersDW;
SELECT FILE_NAME(1) AS Result;

Resultaat:

+-------------+
| Result      |
|-------------|
| WWI_Primary |
+-------------+

Voorbeeld 2 – Meer bestanden

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

USE WideWorldImportersDW;
SELECT 
  FILE_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

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_NAME(1) AS [File 1], 
  FILE_NAME(2) AS [File 2], 
  FILE_NAME(3) AS [File 3];

Resultaat:

+----------+-----------+----------+
| File 1   | File 2    | File 3   |
|----------+-----------+----------|
| Music    | Music_log | NULL     |
+----------+-----------+----------+

In dit geval is er geen bestand met een ID van 3, dus ik krijg een NULL-resultaat voor die kolom.

Voorbeeld 4 – sys.database_files gebruiken

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

SELECT name
FROM sys.database_files
WHERE file_id = 2;

Resultaat:

+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Voorbeeld 5 – sys.master_files gebruiken

Als we sys.master_files . gebruikten , moeten we wat code toevoegen om aan te geven welke database:

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

Resultaat:

+-----------+
| name      |
|-----------|
| Music_log |
+-----------+

Als u in deze weergave de database-ID niet opgeeft, krijgt u resultaten van alle databases. Daarom specificeer ik welke database in de WHERE clausule. In dit geval gebruik ik de DB_ID() functie om de naam van de huidige database te krijgen.


  1. Beste gegevenstype voor het opslaan van valutawaarden in een MySQL-database

  2. Alle records verwijderen behalve de meest recente?

  3. Waarom geeft SQL-server deze fout:Kan de waarde NULL niet invoegen in kolom 'id'?

  4. Inleiding tot PostgreSQL