sql >> Databasteknik >  >> RDS >> Sqlserver

FILE_ID() vs FILE_IDEX() i SQL Server:Vad är skillnaden?

I SQL Server kan du använda FILE_IDEX() funktion för att returnera ID för en given databasfil. Du kan också använda FILE_ID() funktion för att göra samma sak. Båda funktionerna tjänar ungefär samma syfte, så varför har T-SQL båda funktionerna?

Det verkar som om FILE_IDEX() är en ersättning för FILE_ID() , och den stöder ett större antal fil-ID:n. Microsoft rekommenderar nu att du inte använder FILE_ID() , eftersom det är i underhållsläge och kan tas bort i en framtida version av SQL Server.

Så om du letar efter ett snabbt svar på vilken funktion du ska använda, använd FILE_IDEX() .

Men om du är intresserad av skillnaden mellan dessa två funktioner, läs vidare.

Skillnaden

Skillnaden mellan FILE_IDEX() och FILE_ID() finns i returtyperna.

  • FILE_IDEX() returnerar en int .
  • FILE_ID() returnerar en smallint .

Det faktum att FILE_IDEX() returnerar ett heltal betyder att det kan hantera större fil-ID:n. Den kan till exempel hantera fulltextkataloger.

smallint datatypen kan bara hantera värden upp till 32 767, medan en int kan hantera värden upp till 2 147 483 647. I SQL Server överstiger filidentifikationsnumret som tilldelas fulltextkataloger 32 767, och därför FILE_ID() stöder inte fulltextkataloger.

Exempel

Här är ett snabbt exempel för att visa begränsningarna för FILE_ID() jämfört med FILE_IDEX() :

USE WideWorldImportersDW;
SELECT 
  FILE_IDEX('WWIDW_InMemory_Data_1') AS [FILE_IDEX()],
  FILE_ID('WWIDW_InMemory_Data_1') AS [FILE_ID()];

Resultat:

+---------------+-------------+
| FILE_IDEX()   | FILE_ID()   |
|---------------+-------------|
| 65537         | NULL        |
+---------------+-------------+

I det här fallet överstiger fil-ID:t 32 767 och därför FILE_ID() returnerar NULL .


  1. Lokala och globala temporära tabeller i SQL Server

  2. Kontrollera om MySQL-tabellen finns utan att använda välj från syntax?

  3. sökkriterieskillnad mellan Like vs Contains() i oracle

  4. MariaDB SCHEMA() Förklarat