sql >> Base de Datos >  >> RDS >> Sqlserver

FILE_ID() vs FILE_IDEX() en SQL Server:¿Cuál es la diferencia?

En SQL Server, puede usar FILE_IDEX() función para devolver el ID de un archivo de base de datos determinado. También puede usar el FILE_ID() función para hacer lo mismo. Ambas funciones tienen prácticamente el mismo propósito, entonces, ¿por qué T-SQL tiene ambas funciones?

Parece que FILE_IDEX() es un reemplazo para FILE_ID() y admite una gama más amplia de ID de archivo. Microsoft ahora recomienda no usar FILE_ID() , ya que está en modo de mantenimiento y puede eliminarse en una versión futura de SQL Server.

Entonces, si está buscando una respuesta rápida sobre qué función usar, use FILE_IDEX() .

Pero si está interesado en la diferencia entre estas dos funciones, siga leyendo.

La diferencia

La diferencia entre FILE_IDEX() y FILE_ID() está en los tipos de devolución.

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

El hecho de que FILE_IDEX() devuelve un número entero significa que puede manejar ID de archivos más grandes. Por ejemplo, puede manejar catálogos de texto completo.

El pequeño tipo de datos solo puede manejar valores hasta 32,767, mientras que un int puede manejar valores de hasta 2.147.483.647. En SQL Server, el número de identificación de archivo asignado a los catálogos de texto completo supera los 32 767 y, por lo tanto, FILE_ID() no admite catálogos de texto completo.

Ejemplo

Aquí hay un ejemplo rápido para demostrar las limitaciones de FILE_ID() cuando se compara con FILE_IDEX() :

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

Resultado:

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

En este caso, el ID del archivo supera los 32 767 y, por lo tanto, FILE_ID() devuelve NULL .