I SQL Server kan du bruge FILE_IDEX() funktion til at returnere ID'et for en given databasefil. Du kan også bruge FILE_ID() funktion til at gøre det samme. Begge funktioner tjener stort set det samme formål, så hvorfor har T-SQL begge funktioner?
Det ser ud til, at FILE_IDEX() er en erstatning for FILE_ID() , og det understøtter et større udvalg af fil-id'er. Microsoft fraråder nu at bruge FILE_ID() , da den er i vedligeholdelsestilstand og kan blive fjernet i en fremtidig version af SQL Server.
Så hvis du leder efter et hurtigt svar på, hvilken funktion du skal bruge, så brug FILE_IDEX() .
Men hvis du er interesseret i forskellen mellem disse to funktioner, så læs videre.
Forskellen
Forskellen mellem FILE_IDEX() og FILE_ID() er i returtyperne.
FILE_IDEX()returnerer en int .FILE_ID()returnerer en smallint .
Det faktum, at FILE_IDEX() returnerer et heltal betyder, at det kan håndtere større fil-id'er. For eksempel kan den håndtere fuldtekstkataloger.
smallint datatypen kan kun håndtere værdier op til 32.767, hvorimod en int kan håndtere værdier op til 2.147.483.647. I SQL Server overstiger filidentifikationsnummeret, der er tildelt fuldtekstkataloger, 32.767, og derfor FILE_ID() understøtter ikke fuldtekstkataloger.
Eksempel
Her er et hurtigt eksempel til at demonstrere begrænsningerne for FILE_ID() sammenlignet 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 dette tilfælde overstiger fil-id'et 32.767 og derfor FILE_ID() returnerer NULL .