Trong SQL Server, bạn có thể sử dụng FILE_IDEX()
chức năng trả về ID của một tệp cơ sở dữ liệu nhất định. Bạn cũng có thể sử dụng FILE_ID()
chức năng để làm điều tương tự. Cả hai hàm đều phục vụ cùng một mục đích, vậy tại sao T-SQL lại có cả hai hàm?
Có vẻ như FILE_IDEX()
thay thế cho FILE_ID()
và nó hỗ trợ nhiều ID tệp hơn. Microsoft hiện khuyến nghị không nên sử dụng FILE_ID()
, vì nó đang ở chế độ bảo trì và có thể bị xóa trong phiên bản SQL Server trong tương lai.
Vì vậy, nếu bạn đang tìm kiếm câu trả lời nhanh cho hàm nào sẽ sử dụng, hãy sử dụng FILE_IDEX()
.
Nhưng nếu bạn quan tâm đến sự khác biệt giữa hai chức năng này, hãy đọc tiếp.
Sự khác biệt
Sự khác biệt giữa FILE_IDEX()
và FILE_ID()
nằm trong các loại trả lại.
-
FILE_IDEX()
trả về một int . -
FILE_ID()
trả về smallint .
Thực tế là FILE_IDEX()
trả về một số nguyên có nghĩa là nó có thể xử lý các ID tệp lớn hơn. Ví dụ, nó có thể xử lý các danh mục toàn văn.
smallint kiểu dữ liệu chỉ có thể xử lý các giá trị tối đa 32,767, trong khi int có thể xử lý các giá trị lên đến 2,147,483,647. Trong SQL Server, số nhận dạng tệp được gán cho danh mục toàn văn vượt quá 32,767 và do đó, FILE_ID()
không hỗ trợ danh mục toàn văn.
Ví dụ
Dưới đây là một ví dụ nhanh để chứng minh các hạn chế của FILE_ID()
khi so sánh với FILE_IDEX()
:
USE WideWorldImportersDW; SELECT FILE_IDEX('WWIDW_InMemory_Data_1') AS [FILE_IDEX()], FILE_ID('WWIDW_InMemory_Data_1') AS [FILE_ID()];
Kết quả:
+---------------+-------------+ | FILE_IDEX() | FILE_ID() | |---------------+-------------| | 65537 | NULL | +---------------+-------------+
Trong trường hợp này, ID tệp vượt quá 32,767 và do đó FILE_ID()
trả về NULL
.