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 .