Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

FILE_ID() vs. FILE_IDEX() in SQL Server:Was ist der Unterschied?

In SQL Server können Sie FILE_IDEX() verwenden Funktion, um die ID einer bestimmten Datenbankdatei zurückzugeben. Sie können auch die FILE_ID() verwenden Funktion, um dasselbe zu tun. Beide Funktionen dienen ziemlich demselben Zweck, warum also hat T-SQL beide Funktionen?

Es scheint, dass FILE_IDEX() ist ein Ersatz für FILE_ID() , und es unterstützt einen größeren Bereich von Datei-IDs. Microsoft rät jetzt davon ab, FILE_ID() zu verwenden , da es sich im Wartungsmodus befindet und möglicherweise in einer zukünftigen Version von SQL Server entfernt wird.

Wenn Sie also nach einer schnellen Antwort auf die zu verwendende Funktion suchen, verwenden Sie FILE_IDEX() .

Aber wenn Sie sich für den Unterschied zwischen diesen beiden Funktionen interessieren, lesen Sie weiter.

Der Unterschied

Der Unterschied zwischen FILE_IDEX() und FILE_ID() ist in den Rückgabetypen.

  • FILE_IDEX() gibt ein int zurück .
  • FILE_ID() gibt ein Smallint zurück .

Die Tatsache, dass FILE_IDEX() eine Ganzzahl zurückgibt, bedeutet, dass größere Datei-IDs verarbeitet werden können. Beispielsweise kann es mit Volltextkatalogen umgehen.

Die Smallint Der Datentyp kann nur Werte bis 32.767 verarbeiten, während ein int kann Werte bis zu 2.147.483.647 verarbeiten. In SQL Server überschreitet die den Volltextkatalogen zugewiesene Dateiidentifikationsnummer 32.767 und daher FILE_ID() unterstützt keine Volltextkataloge.

Beispiel

Hier ist ein kurzes Beispiel, um die Einschränkungen von FILE_ID() zu demonstrieren im Vergleich zu FILE_IDEX() :

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

Ergebnis:

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

In diesem Fall überschreitet die Datei-ID 32.767 und daher FILE_ID() gibt NULL zurück .