GetFileNamespacePath (Transact-SQL)
Gilt für: SQL Server
Gibt den UNC-Pfad für eine Datei bzw. ein Verzeichnis in einer FileTable zurück.
Syntax
<column-name>.GetFileNamespacePath(is_full_path, @option)
Argumente
column-name
Der Spaltenname der VARBINARY(MAX) file_stream -Spalte in einer FileTable.
Der Wert von column-name muss ein gültiger Spaltenname sein. Es kann sich hierbei weder um einen Ausdruck noch um einen Wert handeln, der von einer Spalte eines anderen Datentyps konvertiert oder umgewandelt wurde.
is_full_path
Ein ganzzahliger Ausdruck, der angibt, ob ein relativer oder ein absoluter Pfad zurückgegeben werden soll. is_full_path kann einen der folgenden Werte aufweisen:
Wert | Beschreibung |
---|---|
0 | Gibt den relativen Pfad innerhalb des Verzeichnisses auf Datenbankebene zurück. Dies ist der Standardwert. |
1 | Gibt den vollständigen UNC-Pfad zurück, der mit \\computer_name beginnt. |
@option
Ein ganzzahliger Ausdruck, der definiert, wie die Serverkomponente des Pfads formatiert werden soll. @option kann einen der folgenden Werte aufweisen:
Wert | Beschreibung |
---|---|
0 | Gibt den in ein NetBIOS-Format konvertierten Servernamen zurück. Beispiel:\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase Dies ist der Standardwert. |
1 | Gibt den Servernamen ohne Konvertierung zurück. Beispiel:\\ServerName\MSSQLSERVER\MyDocumentDatabase |
2 | Gibt den vollständigen Serverpfad zurück. Beispiel:\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase |
Rückgabetyp
nvarchar(max)
Wenn die SQL Server-Instanz in einem Failovercluster gruppiert ist, ist der Computername, der als Teil dieses Pfads zurückgegeben wird, der virtuelle Hostname für die gruppierte Instanz.
Wenn die Datenbank zu einer Always On-Verfügbarkeitsgruppe gehört, gibt die FileTableRootPath-Funktion den virtuellen Netzwerknamen (Virtual Network Name, VNN) anstelle des Computernamens zurück.
Allgemeine Hinweise
Der von der GetFileNamespacePath -Funktion zurückgegebene Pfad ist ein logischer Verzeichnis- oder Dateipfad im folgenden Format:
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\...
Dieser logische Pfad ist keine direkte Entsprechung eines physischen NTFS-Pfads. Sie wird vom Dateisystem-Filtertreiber von FILESTREAM und dem FILESTREAM-Agent in den physischen Pfad übersetzt. Durch diese Trennung zwischen dem logischen Pfad und dem physischen Pfad kann SQL Server Daten intern neu organisieren, ohne die Gültigkeit des Pfads zu beeinträchtigen.
Bewährte Methoden
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 mit der Funktion FileTableRootPath und der Funktion GetFileNamespacePath zur Laufzeit ab, wie im folgenden Beispiel gezeigt. Die GetFileNamespacePath -Funktion gibt standardmäßig den relativen Pfad der Datei unter dem Stammpfad der Datenbank zurück.
USE MyDocumentDatabase;
@root varchar(100)
SELECT @root = FileTableRootPath();
@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore
WHERE Name = N'document.docx';
Hinweise
Beispiele
In den folgenden Beispielen wird gezeigt, wie die GetFileNamespacePath -Funktion aufgerufen wird, um den UNC-Pfad für eine Datei oder ein Verzeichnis in einer FileTable abzurufen.
-- returns the relative path of the form "\MyFileTable\MyDocDirectory\document.docx"
SELECT file_stream.GetFileNamespacePath() AS FilePath FROM DocumentStore
WHERE Name = N'document.docx';
-- returns "\\MyServer\MSSQLSERVER\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N'document.docx';