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


GetFileNamespacePath (Transact-SQL)

Область применения: SQL Server

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

Синтаксис

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

Аргументы

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

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

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

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

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

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

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

\\SERVERNAME\MSSQLSERVER\MyDocumentDatabase

Это значение по умолчанию.
1 Возвращает имя сервера без преобразования, например:

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

\\ServerName.MyDomain.com\MSSQLSERVER\MyDocumentDatabase

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

nvarchar(max)

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

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

Общие замечания

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

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

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

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

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

USE MyDocumentDatabase;  
@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\MyDocumentDatabase\MyFileTable\MyDocDirectory\document.docx"  
SELECT file_stream.GetFileNamespacePath(1, Null) AS FilePath FROM DocumentStore  
WHERE Name = N'document.docx';  

См. также

Work with Directories and Paths in FileTables