Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

FILE_ID() vs FILE_IDEX() dans SQL Server :Quelle est la différence ?

Dans SQL Server, vous pouvez utiliser le FILE_IDEX() fonction pour renvoyer l'ID d'un fichier de base de données donné. Vous pouvez également utiliser le FILE_ID() fonction pour faire la même chose. Les deux fonctions servent à peu près le même but, alors pourquoi T-SQL a-t-il les deux fonctions ?

Il semble que FILE_IDEX() remplace FILE_ID() , et il prend en charge une plus grande plage d'ID de fichiers. Microsoft déconseille désormais d'utiliser FILE_ID() , car il est en mode maintenance et peut être supprimé dans une future version de SQL Server.

Donc, si vous cherchez une réponse rapide pour quelle fonction utiliser, utilisez FILE_IDEX() .

Mais si vous êtes intéressé par la différence entre ces deux fonctions, lisez la suite.

La différence

La différence entre FILE_IDEX() et FILE_ID() est dans les types de retour.

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

Le fait que FILE_IDEX() renvoie un entier signifie qu'il peut gérer des ID de fichiers plus volumineux. Par exemple, il peut gérer des catalogues en texte intégral.

Le smallint le type de données ne peut gérer que des valeurs jusqu'à 32 767, alors qu'un int peut gérer des valeurs jusqu'à 2 147 483 647. Dans SQL Server, le numéro d'identification de fichier attribué aux catalogues de texte intégral dépasse 32 767, et par conséquent, FILE_ID() ne prend pas en charge les catalogues en texte intégral.

Exemple

Voici un exemple rapide pour démontrer les limites de FILE_ID() par rapport à FILE_IDEX() :

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

Résultat :

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

Dans ce cas, l'ID de fichier dépasse 32 767 et donc FILE_ID() renvoie NULL .