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

Spaltenname
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_namebeginnt.

@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 anstelle des Computernamens den Namen des virtuellen Netzwerks (VNN) 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 Dateisystemfiltertreiber von FILESTREAM und dem FILESTREAM-Agent in den physischen Pfad übersetzt. Durch diese Trennung zwischen dem logischen Pfad und dem physischen Pfad können SQL Server Daten intern neu organisieren, ohne die Gültigkeit des Pfads zu beeinträchtigen.

Empfehlungen

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';  

Bemerkungen

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';  

Weitere Informationen

Verwenden von Verzeichnissen und Pfaden in FileTables