Arbeiten mit Verzeichnissen und Pfaden in FileTables

Beschreibt die Verzeichnisstruktur, mit der die Dateien in FileTables gespeichert werden.

In diesem Thema

Ich möchte…

  • Mit Verzeichnissen und Pfaden in FileTables arbeiten

  • Relative Pfaden für portablen Code verwenden

Weitere Informationen

  • Wichtige Einschränkungen

    • Schachtelungsebene

    • Länge des vollständigen Pfadnamens

  • Der vollständige Pfad zu einem in einer FileTable gespeicherten Element

  • Die Semantik der Stammverzeichnisse auf der Instanz-, Datenbank- und FileTable-Ebene

  • Die is_directory-Spalte im FileTable-Schema

  • Verwenden von virtuellen Netzwerknamen mit (VNNs) AlwaysOn-Verfügbarkeitsgruppen

Vorgehensweise: Arbeiten mit Verzeichnissen und Pfaden in FileTables

Sie können die folgenden drei Funktionen verwenden, um mit FileTable-Verzeichnissen in Transact-SQL zu arbeiten:

Für dieses Ergebnis

Verwenden Sie diese Funktion

Ermitteln des UNC-Pfades auf der Stammebene für eine bestimmte FileTable oder die aktuelle Datenbank.

FileTableRootPath (Transact-SQL)

Ermitteln eines absoluten oder relativen UNC-Pfades für eine Datei oder ein Verzeichnis in einer FileTable.

GetFileNamespacePath (Transact-SQL)

Ermitteln des ID-Wertes "path_locator" für die angegebene Datei bzw. das angegebene Verzeichnis in einer FileTable unter Angabe des Pfades.

GetPathLocator (Transact-SQL)

[NACH OBEN]

Vorgehensweise: Relative Pfade für portablen Code verwenden

Sie sollten keinen Code schreiben, der auf absoluten Dateipfaden basiert, um Code und Anwendungen vom aktuellen Computer und von der Datenbank unabhängig zu halten. Rufen Sie stattdessen den vollständigen Pfad für eine Datei mit der Funktion FileTableRootPath (Transact-SQL) zusammen mit der Funktion GetFileNamespacePath (Transact-SQL) zur Laufzeit ab, wie im folgenden Beispiel gezeigt. Die GetFileNamespacePath-Funktion gibt standardmäßig den relativen Pfad der Datei unter dem Stammpfad für die Datenbank zurück.

USE database_name;
DECLARE @root nvarchar(100);
DECLARE @fullpath nvarchar(1000);

SELECT @root = FileTableRootPath();
SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
    FROM filetable_name
    WHERE name = N'document_name';

PRINT @fullpath;
GO

[Nach oben]

Wichtige Einschränkungen

Schachtelungsebene

Wichtiger HinweisWichtig

Es ist nicht möglich, mehr als 15 Ebenen von Unterverzeichnissen im FileTable-Verzeichnis zu speichern. Wenn Sie 15 Unterverzeichnisebenen speichern, kann die niedrigste Ebene keine Dateien enthalten, da diese Dateien eine zusätzliche Ebene darstellen würden.

Länge des vollständigen Pfadnamens

Wichtiger HinweisWichtig

Das NTFS-Dateisystem unterstützt Pfadnamen, die viel länger als die 260-Zeichen-Grenze der Windows-Shell und der meisten Windows-APIs sind. Daher ist es möglich, Dateien in der Dateihierarchie einer FileTable mit Transact-SQL zu erstellen. Diese können Sie mit dem Windows-Explorer oder vielen anderen Windows-Anwendungen weder anzeigen noch öffnen, da der vollständige Pfadname 260 Zeichen überschreitet. Sie können jedoch weiterhin mit Transact-SQL auf diese Dateien zugreifen.

Der vollständige Pfad zu einem in einer FileTable gespeicherten Element

Der vollständige Pfad zu einer Datei oder einem Verzeichnis, der in einer FileTable gespeichert wurde, beginnt mit den folgenden Elementen:

  1. Die für den FILESTREAM-Datei-E/A-Zugriff auf SQL Server-Instanzebene aktivierte Freigabe.

  2. Der auf Datenbankebene angegebene DIRECTORY_NAME.

  3. Das auf FileTable-Ebene angegebene FILETABLE_DIRECTORY.

Die resultierende Hierarchie sieht etwa folgendermaßen aus:

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

Diese Verzeichnishierarchie bildet den Stamm des FileTable-Namespace. Unter dieser Verzeichnishierarchie werden die FILESTREAM-Daten für die FileTable als Dateien wie auch als Unterverzeichnisse gespeichert, die auch Dateien und Unterverzeichnisse enthalten können.

Bitte denken Sie daran, dass die unter der FILESTREAM-Freigabe auf Instanzebene erstellte Verzeichnishierarchie eine virtuelle Verzeichnishierarchie ist. Diese Hierarchie wird in der Datenbank SQL Server gespeichert und nicht physisch im NTFS-Dateisystem dargestellt. Alle Vorgänge, die unter der FILESTREAM-Freigabe und in den enthaltenen FileTables auf Dateien und Verzeichnisse zugreifen, werden durch eine im Dateisystem eingebettete SQL Server-Komponente abgefangen und behandelt.

[NACH OBEN]

Die Semantik der Stammverzeichnisse auf der Instanz-, Datenbank- und FileTable-Ebene

Diese Verzeichnishierarchie achtet auf die folgende Semantik:

  • Die FILESTREAM-Freigabe auf Instanzebene wird von einem Administrator konfiguriert und als Eigenschaft des Servers gespeichert. Sie können diese Freigabe mit dem SQL Server-Konfigurations-Manager umbenennen. Ein Umbenennungsvorgang wird erst wirksam, wenn der Server neu gestartet wird.

  • Der DIRECTORY_NAME auf Datenbankebene ist standardmäßig NULL, wenn Sie eine neue Datenbank erstellen. Ein Administrator kann diesen Namen festlegen oder mit der Anweisung ALTER DATABASE ändern. Der Name muss in dieser Instanz eindeutig sein, wobei nicht zwischen Groß- und Kleinschreibung unterschieden wird.

  • In der Regel geben Sie den FILETABLE_DIRECTORY-Namen als Teil der Anweisung CREATE TABLE beim Erstellen einer FileTable an. Sie können diesen Namen mit dem Befehl ALTER TABLE ändern.

  • Es ist nicht möglich, diese Stammverzeichnisse kann durch Datei-E/A-Vorgänge umzubenennen.

  • Es ist nicht möglich, diese Stammverzeichnisse mit exklusiven Dateihandles zu öffnen.

[NACH OBEN]

Die is_directory-Spalte im FileTable-Schema

In der folgenden Tabelle wird die Interaktion zwischen der Spalte is_directory und der Spalte file_stream beschrieben, die die FILESTREAM-Daten in einer FileTable enthält.

is_directory-Wert

file_stream-Wert

Verhalten

FALSE

NULL

Dies ist eine ungültige Kombination, die von einer systemdefinierten Einschränkung abgefangen wird.

FALSE

<value>

Das Element stellt eine Datei dar.

TRUE

NULL

Das Element stellt ein Verzeichnis dar.

TRUE

<value>

Dies ist eine ungültige Kombination, die von einer systemdefinierten Einschränkung abgefangen wird.

[Nach oben]

Verwenden von virtuellen Netzwerknamen mit (VNNs) AlwaysOn-Verfügbarkeitsgruppen

Wenn die Datenbank, die FILESTREAM- oder FileTable-Daten enthält, zu einer AlwaysOn-Verfügbarkeitsgruppe gehört:

[Nach oben]

Siehe auch

Konzepte

Aktivieren der erforderlichen Komponenten für FileTable

Erstellen, Ändern und Löschen von FileTables

Zugreifen auf FileTables mit Transact-SQL

Zugreifen auf FileTables mit Datei-E/A-APIs