Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server
Описывает структуру каталогов, в которой файлы хранятся в таблицах FileTable.
Практическое руководство. Работа с каталогами и путями в таблицах FileTable
Для работы с каталогами FileTable в Transact-SQL можно использовать следующие три функции:
Чтобы получить этот результат, выполните следующее. | Воспользуйтесь этой функцией |
---|---|
Получите корневой путь UNC для конкретной таблицы FileTable или для текущей базы данных. | FileTableRootPath (Transact-SQL) |
Получите абсолютный или относительный путь UNC к файлу или каталогу в таблице FileTable. | GetFileNamespacePath (Transact-SQL) |
Получите значение идентификатора path_locator для заданного файла или каталога в таблице FileTable, указав путь к нему. | GetPathLocator (Transact-SQL) |
Используйте относительные пути для переносимого кода
Чтобы код и приложения были независимы от текущего компьютера и базы данных, следует избегать написания кода, который полагается на абсолютные пути. Вместо этого получите полный путь к файлу во время выполнения с помощью функций FileTableRootPath (Transact-SQL) и GetFileNamespacePath (Transact-SQL)), как показано в следующем примере. По умолчанию функция GetFileNamespacePath
возвращает относительный путь к файлу, находящемуся внутри корневого пути к базе данных.
USE database_name;
DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);
SELECT @root = FileTableRootPath();
SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';
PRINT @fullpath;
GO
Ограничения
Уровень вложенности
Внимание
Нельзя хранить более 15 уровней вложенных каталогов в каталоге FileTable. Если сохранено 15 уровней вложенных каталогов, каталог самого нижнего уровня не сможет содержать файлы, так как эти файлы представляют собой дополнительный уровень.
Длина полного имени
Внимание
Файловая система NTFS поддерживает пути, намного превышающие ограничение в 260 символов, установленное в оболочке Windows и большинстве других функций Windows API. Поэтому можно создавать файлы в файловой иерархии FileTable с помощью Transact-SQL, которые нельзя будет просмотреть или открыть в Проводнике Windows и многих других приложениях Windows, поскольку полный путь превышает 260 символов. Однако с этими файлами вы можете продолжать работать с помощью инструкций Transact-SQL.
Полный путь к элементу, хранящемуся в таблице FileTable
Полный путь к файлу или каталогу, сохраненный в таблице FileTable, начинается со следующих элементов.
Ресурс FILESTREAM, предоставленный для доступа к файлам на уровне экземпляра SQL Server.
Указан
DIRECTORY_NAME
на уровне базы данных.На уровне FileTable указан
FILETABLE_DIRECTORY
.
В итоге иерархия выглядит следующим образом.
\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\
Данная иерархия каталогов образует корень пространства имен файлов FileTable. В этой иерархии каталогов данные FILESTREAM для FileTable хранятся в виде файлов, а также в подкаталогах, которые также могут содержать файлы и вложенные каталоги.
Важно иметь в виду, что иерархия каталогов, созданная в общем ресурсе FILESTREAM на уровне экземпляра, является виртуальной иерархией каталогов. Эта иерархия хранится в базе данных SQL Server и не представляется физически в файловой системе NTFS. Все операции, которые обращаются к файлам и каталогам в общей папке FILESTREAM и содержащимся в ней FileTables, перехватываются и обрабатываются компонентом SQL Server, внедренным в файловую систему.
Семантика корневых каталогов на уровне экземпляра, базы данных и таблицы FileTable
Эта иерархия каталогов имеет следующую семантику.
Общий ресурс FILESTREAM на уровне экземпляра настраивается администратором и хранится в виде свойства сервера. Вы можете переименовать этот общий доступ с помощью Диспетчера конфигурации SQL Server. Операция переименования не вступила в силу до перезапуска сервера.
Уровень
DIRECTORY_NAME
базы данных имеет значение NULL по умолчанию при создании новой базы данных. Администратор может задать или изменить это имя с помощью инструкцииALTER DATABASE
. Это имя должно быть уникальным (при сравнении без учета регистра) в этом экземпляре.Как правило, при создании таблицы FileTable вы указываете имя
FILETABLE_DIRECTORY
в составе инструкцииCREATE TABLE
. Это имя можно изменить с помощьюALTER TABLE
команды.Эти корневые каталоги нельзя переименовать с помощью операций ввода-вывода файлов.
Эти корневые каталоги нельзя открыть с эксклюзивными дескрипторами файлов.
Столбец is_directory в схеме FileTable
Во следующей таблице описывается взаимодействие между столбцом is_directory
и столбцом file_stream
, содержащим данные FILESTREAM в файлотаблице.
is_directory значение | file_stream значение | Поведение |
---|---|---|
FALSE |
NULL |
Это недопустимое сочетание, которое обнаружено системным ограничением. |
FALSE |
<value> |
Этот элемент представляет файл. |
TRUE |
NULL |
Этот элемент представляет каталог. |
TRUE |
<value> |
Это недопустимое сочетание, которое выявлено установленным системой ограничением. |
Использование виртуальных сетевых имен (VNN) с группами доступности Always On
Если база данных, содержащая данные FILESTREAM или FileTable, принадлежит группе доступности:
Функции FILESTREAM и FileTable принимают или возвращают имена виртуальной сети, а не имена компьютеров. Дополнительные сведения об этих функциях см. в разделе FILESTREAM и FileTable Functions (Transact-SQL).
При доступе к данным FILESTREAM или FileTable с использованием API файловой системы следует использовать VNN вместо имен компьютеров. Дополнительные сведения см. в разделе FILESTREAM и FileTable с группами доступности AlwaysOn (SQL Server).