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