Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

FILE_ID() vs FILE_IDEX() in SQL Server:qual è la differenza?

In SQL Server puoi utilizzare FILE_IDEX() funzione per restituire l'ID di un determinato file di database. Puoi anche usare FILE_ID() funzione per fare la stessa cosa. Entrambe le funzioni hanno più o meno lo stesso scopo, quindi perché T-SQL ha entrambe le funzioni?

Sembra che FILE_IDEX() è un sostituto di FILE_ID() e supporta una gamma più ampia di ID file. Microsoft ora sconsiglia di utilizzare FILE_ID() , poiché è in modalità di manutenzione e potrebbe essere rimosso in una versione futura di SQL Server.

Quindi, se stai cercando una risposta rapida per quale funzione utilizzare, usa FILE_IDEX() .

Ma se sei interessato alla differenza tra queste due funzioni, continua a leggere.

La differenza

La differenza tra FILE_IDEX() e FILE_ID() è nei tipi di ritorno.

  • FILE_IDEX() restituisce un int .
  • FILE_ID() restituisce un smallint .

Il fatto che FILE_IDEX() restituisce un numero intero significa che può gestire ID file più grandi. Ad esempio, può gestire cataloghi full-text.

La piccola intelligenza il tipo di dati può gestire solo valori fino a 32.767, mentre un int può gestire valori fino a 2.147.483.647. In SQL Server, il numero di identificazione del file assegnato ai cataloghi full-text supera 32.767 e, pertanto, FILE_ID() non supporta i cataloghi full-text.

Esempio

Ecco un rapido esempio per dimostrare i limiti di FILE_ID() rispetto a FILE_IDEX() :

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

Risultato:

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

In questo caso, l'ID del file supera 32.767 e quindi FILE_ID() restituisce NULL .