sql >> Databáze >  >> RDS >> Sqlserver

Použijte FILE_IDEX() k vrácení ID databázového souboru na serveru SQL Server

V SQL Server můžete použít FILE_IDEX() funkce pro vrácení ID daného databázového souboru.

Chcete-li to provést, předejte funkci název logického souboru databázového souboru. Toto je jméno, které odpovídá name ve sloupci sys.master_files zobrazení katalogu nebo sys.database_files zobrazení katalogu. Tyto pohledy také obsahují ID souboru, ale FILE_NAME() ušetří vám nutnost dotazovat se na tato zobrazení.

Příklad 1 – Základní použití

Zde je rychlý příklad k demonstraci.

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

Výsledek:

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

Příklad 2 – Více souborů

Zde je další příklad, tentokrát vrací tři soubory.

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

Výsledek:

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

Příklad 3 – Jiná databáze

V tomto příkladu přepnu do jiné databáze a poté znovu spustím dotaz.

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

Výsledek:

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

Názvy souborů se pro tuto databázi liší. Pokud jde o třetí sloupec, neexistuje žádný soubor s tímto názvem, takže dostaneme výsledek NULL.

Příklad 4 – Použití sys.database_files

Jak již bylo zmíněno, FILE_IDEX() Tato funkce vás ušetří od dotazování na sys.database_files nebo sys.master_files pohledy. Pokud bychom neměli FILE_IDEX() funkce, museli bychom udělat něco takového:

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

Výsledek:

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

Příklad 5 – Použití sys.master_files

Zde je podobný dotaz pro sys.master_files :

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

Výsledek:

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

Tento pohled je celosystémový a může vracet data ze všech databází. Proto přidám aktuální databázi (pomocí DB_ID() ) do WHERE dotazu doložka.


  1. sql join two table

  2. AKTUALIZUJTE pomocí OBJEDNÁVKY BY

  3. Co je sekvence v oracle

  4. Pochopení aliasů Oracle – proč není alias v dotazu rozpoznán, pokud není zabalen do druhého dotazu?