Share via


GetFileNamespacePath (Transact-SQL)

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 aus einer Spalte eines anderen Datentyps konvertierten bzw. umgewandelten Wert handeln.

  • 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.

    Standardwert

    1

    Gibt den vollständigen UNC-Pfad zurück, der mit dem \\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 Servernamen in ein NetBIOS-Format konvertiert zurück, z. B.:

    \\SERVERNAME\MSSQLSERVER\MyDocumentDB

    Dies ist der Standardwert.

    1

    Gibt den Servernamen ohne Konvertierung zurück, z. B.:

    \\ServerName\MSSQLSERVER\MyDocumentDB

    2

    Gibt den vollständigen Serverpfad zurück, z. B.:

    \\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB

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 AlwaysOn-Verfügbarkeitsgruppe gehört, dann gibt die FileTableRootPath-Funktion den virtuellen Netzwerknamen (VNN) statt 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. Er wird vom Dateisystem-Filtertreiber von FILESTREAM und vom FILESTREAM-Agent in den physischen Pfad übersetzt. Durch diese Unterscheidung zwischen dem logischen 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 zusammen mit 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 für die Datenbank zurück.

USE MyDocumentDB;
@root varchar(100)
SELECT @root = FileTableRootPath();

@fullPath = varchar(1000);
SELECT @fullPath = @root + file_stream.GetFileNamespacePath() FROM DocumentStore
WHERE Name = N’document.docx’;

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\MyDocumentDB\MyFileTable\MyDocDirectory\document.docx”
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore
WHERE Name = N’document.docx’;

Siehe auch

Konzepte

Arbeiten mit Verzeichnissen und Pfaden in FileTables