Arbeiten mit Verzeichnissen und Pfaden in FileTables
Gilt für:SQL Server
Beschreibt die Verzeichnisstruktur, mit der die Dateien in FileTables gespeichert werden.
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) |
Verwenden relativer Pfade für portierbaren Code
Um Code und Anwendungen vom aktuellen Computer und von der Datenbank unabhängig zu halten, sollten Sie keinen Code schreiben, der auf absoluten Dateipfaden basiert. Rufen Sie stattdessen den vollständigen Pfad für eine Datei zur Laufzeit ab, indem Sie die Funktionen FileTableRootPath (Transact-SQL) und GetFileNamespacePath (Transact-SQL)) zusammen verwenden, wie im folgenden Beispiel gezeigt. Die GetFileNamespacePath
-Funktion gibt standardmäßig den relativen Pfad der Datei unter dem Stammpfad der 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
Begrenzungen
Schachtelungsebene
Wichtig
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
Wichtig
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:
Die Freigabe, die für den FILESTREAM-Datei-E/A-Zugriff auf SQL Server-Instanzebene aktiviert ist.
Dies
DIRECTORY_NAME
wird auf Datenbankebene angegeben.Der
FILETABLE_DIRECTORY
angegebene Wert auf FileTable-Ebene.
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 und 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 SQL Server-Datenbank gespeichert und wird nicht physisch im NTFS-Dateisystem dargestellt. Alle Vorgänge, die auf Dateien und Verzeichnisse unter der FILESTREAM-Freigabe und in den darin enthaltenen FileTables zugreifen, werden von einer SQL Server-Komponente abgefangen und verarbeitet, die in das Dateisystem eingebettet ist.
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 umbenennen, indem Sie SQL Server-Konfigurations-Manager verwenden. Ein Umbenennungsvorgang wird erst wirksam, wenn der Server neu gestartet wird.
Die Datenbankebene
DIRECTORY_NAME
ist standardmäßig null, wenn Sie eine neue Datenbank erstellen. Ein Administrator kann diesen Namen mithilfe derALTER DATABASE
Anweisung festlegen oder ändern. Der Name muss in dieser Instanz eindeutig sein, wobei nicht zwischen Groß- und Kleinschreibung unterschieden wird.Sie geben den Namen in der
FILETABLE_DIRECTORY
Regel als Teil derCREATE TABLE
Anweisung an, wenn Sie eine FileTable erstellen. Sie können diesen Namen mithilfe desALTER TABLE
Befehls ändern.Sie können diese Stammverzeichnisse nicht durch Datei-E/A-Vorgänge umbenennen.
Sie können diese Stammverzeichnisse nicht mit exklusiven Dateihandles öffnen.
Die is_directory-Spalte im FileTable-Schema
In der folgenden Tabelle wird die Interaktion zwischen der is_directory
Spalte und der file_stream
Spalte 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 vom System definierten 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 vom System definierten Einschränkung abgefangen wird. |
Verwenden von Virtuellen Netzwerknamen (Virtual Network Names, VNNs) mit AlwaysOn-Verfügbarkeitsgruppen
Wenn die Datenbank, die FILESTREAM- oder FileTable-Daten enthält, zu einer Verfügbarkeitsgruppe gehört:
Die FILESTREAM-Funktion und die FileTable-Funktion akzeptieren oder geben virtuelle Netzwerknamen (VNNs) statt Computernamen zurück. Weitere Informationen zu diesen Funktionen finden Sie unter FILESTREAM- und FileTable-Funktionen (Transact-SQL).
Bei allen Zugriffen auf FILESTREAM- oder FileTable-Daten über Dateisystem-APIs sollten VNNs statt der Computernamen verwendet werden. Weitere Informationen finden Sie unter FILESTREAM und FileTable mit AlwaysOn-Verfügbarkeitsgruppen (SQL Server).
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für