Поделиться через


GetFileNamespacePath (Transact-SQL)

Возвращает путь UNC к файлу или каталогу в таблице FileTable.

Синтаксис

<column-name>.GetFileNamespacePath(is_full_path, @option)

Аргументы

  • column-name
    Имя столбца file_stream типа VARBINARY(MAX) в таблице FileTable.

    Значение column-name должно быть действительным именем столбца. Это не может быть выражение или значение, преобразованное или приведенное из столбца другого типа данных.

  • is_full_path
    Целочисленное выражение, указывающее, какой путь возвращать: относительный или абсолютный. Параметр is_full_path может принимать одно из следующих значений:

    Значение

    Описание

    0

    Возвращает относительный путь внутри каталога уровня базы данных.

    Это значение по умолчанию.

    1

    Возвращает полный путь UNC, начиная с \\computer_name.

  • @option
    Целочисленное выражение, определяющее способ форматирования серверных компонентов пути. Параметр @option может принимать одно из следующих значений:

    Значение

    Описание

    0

    Возвращает имя сервера, преобразованное в формат NetBIOS, например

    \\SERVERNAME\MSSQLSERVER\MyDocumentDB

    Это значение по умолчанию.

    1

    Возвращает имя сервера без преобразования, например:

    \\ServerName\MSSQLSERVER\MyDocumentDB

    2

    Возвращает полный путь сервера, например:

    \\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDB

Тип возвращаемых данных

nvarchar(max)

Если экземпляр SQL Server является кластеризованным экземпляром в отказоустойчивом кластере, то имя компьютера, возвращаемое в качестве части этого пути, совпадает с именем виртуального узла для кластеризованного экземпляра.

Если база данных принадлежит к группе доступности AlwaysOn, то функция FileTableRootPath возвращает имя виртуальной сети вместо имени компьютера.

Общие примечания

Путь файлового пространства имен, возвращаемый функцией GetFileNamespacePath, является логическим путем к файлу или каталогу в следующем формате:

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

Этот логический путь не соответствует физическому пути NTFS. Он преобразуется в физический путь драйвером фильтра FILESTREAM файловой системы и агентом FILESTREAM. Возможность отделить логический путь от физического позволяет SQL Server реорганизовать внутренние данные таким образом, чтобы пути остались действительными.

Рекомендации

Чтобы код и приложения были независимы от текущего компьютера и базы данных, следует избегать создания кода с использованием абсолютных путей. Вместо этого рекомендуется получать полный путь к файлу во время выполнения с помощью функций FileTableRootPath и GetFileNamespacePath, как показано в следующем примере. По умолчанию функция GetFileNamespacePath возвращает относительный путь к файлу, находящемуся внутри корневого пути к базе данных.

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

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

Примеры

В следующем примере показан вызов функции GetFileNamespacePath для получения пути UNC к файлу или каталогу в таблице FileTable.

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

См. также

Основные понятия

Работа с каталогами и путями в таблицах FileTable