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
.