В SQL Server можете да използвате FILE_IDEX()
функция за връщане на идентификатора на даден файл на базата данни. Можете също да използвате FILE_ID()
функция да направи същото нещо. И двете функции служат почти за една и съща цел, така че защо T-SQL има и двете функции?
Изглежда, че FILE_IDEX()
е заместител на FILE_ID()
и поддържа по-голям набор от идентификатори на файлове. Microsoft вече препоръчва да не се използва FILE_ID()
, тъй като е в режим на поддръжка и може да бъде премахнат в бъдеща версия на SQL Server.
Така че, ако търсите бърз отговор коя функция да използвате, използвайте FILE_IDEX()
.
Но ако се интересувате от разликата между тези две функции, прочетете нататък.
Разликата
Разликата между FILE_IDEX()
и FILE_ID()
е в връщаните типове.
FILE_IDEX()
връща int .FILE_ID()
връща smallint .
Фактът, че FILE_IDEX()
връща цяло число означава, че може да обработва по-големи идентификатори на файлове. Например, може да обработва каталози с пълен текст.
Малкиятит типът данни може да обработва само стойности до 32 767, докато int може да обработва стойности до 2,147,483,647. В SQL Server идентификационният номер на файла, присвоен на пълнотекстови каталози, надвишава 32 767 и следователно FILE_ID()
не поддържа каталози с пълен текст.
Пример
Ето един бърз пример за демонстриране на ограниченията на FILE_ID()
в сравнение с FILE_IDEX()
:
ИЗПОЛЗВАЙТЕ WideWorldImportersDW;ИЗБЕРЕТЕ FILE_IDEX('WWIDW_InMemory_Data_1') КАТО [FILE_IDEX()], FILE_ID('WWIDW_InMemory_Data_1') КАТО [FILE_ID()];
Резултат:
<пред>+---------------+------------+| FILE_IDEX() | FILE_ID() ||--------------+------------|| 65537 | NULL |+---------------+------------+
В този случай идентификаторът на файла надвишава 32 767 и следователно FILE_ID()
връща NULL
.