Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

FILE_ID() vs FILE_IDEX() no SQL Server:Qual é a diferença?


No SQL Server, você pode usar o FILE_IDEX() função para retornar o ID de um determinado arquivo de banco de dados. Você também pode usar o FILE_ID() função para fazer a mesma coisa. Ambas as funções servem praticamente ao mesmo propósito, então por que o T-SQL tem ambas as funções?

Parece que FILE_IDEX() é um substituto para FILE_ID() , e oferece suporte a um intervalo maior de IDs de arquivo. A Microsoft agora não recomenda o uso de FILE_ID() , pois está em modo de manutenção e pode ser removido em uma versão futura do SQL Server.

Então, se você está procurando uma resposta rápida para qual função usar, use FILE_IDEX() .

Mas se você estiver interessado na diferença entre essas duas funções, continue lendo.


A diferença


A diferença entre FILE_IDEX() e FILE_ID() está nos tipos de retorno.
  • FILE_IDEX() retorna um int .
  • FILE_ID() retorna um pequeno .

O fato de que FILE_IDEX() retorna um número inteiro significa que ele pode lidar com IDs de arquivos maiores. Por exemplo, ele pode lidar com catálogos de texto completo.

O pequeno tipo de dados só pode lidar com valores de até 32.767, enquanto um int pode manipular valores de até 2.147.483.647. No SQL Server, o número de identificação do arquivo atribuído aos catálogos de texto completo excede 32.767 e, portanto, FILE_ID() não suporta catálogos de texto completo.

Exemplo


Aqui está um exemplo rápido para demonstrar as limitações de FILE_ID() quando comparado com 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        |
+---------------+-------------+

Nesse caso, o ID do arquivo excede 32.767 e, portanto, FILE_ID() retorna NULL .